Если у меня есть такая функция:
def foo(name, opts={}):
pass
И я хочу добавить подсказки типа к параметрам, как мне это сделать? То, как я предположил, дает мне синтаксическую ошибку:
def foo(name: str, opts={}: dict) -> str:
pass
Следующее не выдает синтаксическую ошибку, но это не похоже на интуитивный способ обработки этого случая:
def foo(name: str, opts: dict={}) -> str:
pass
Я не могу найти ничего в typing
документации или в поиске Google.
Изменить: я не знал, как аргументы по умолчанию работает в Python, но ради этого вопроса я буду держать примеры выше. В общем, гораздо лучше сделать следующее:
def foo(name: str, opts: dict=None) -> str:
if not opts:
opts={}
pass
python
python-3.x
type-hinting
мистифицировать
источник
источник
scala
делает язык.Ответы:
Ваш второй путь правильный.
это выводы
Это правда, что он не указан в PEP 484 , но подсказки типов являются применением аннотаций функций, которые описаны в PEP 3107. В разделе синтаксиса ясно, что аргументы ключевых слов работают с аннотациями функций таким образом.
Я настоятельно не рекомендую использовать изменяемые аргументы ключевых слов. Больше информации здесь .
источник
Если вы используете печатание (введено в Python 3.5), вы можете использовать
typing.Optional
, гдеOptional[X]
эквивалентноUnion[X, None]
. Он используется, чтобы сигнализировать, что явное значениеNone
разрешено. Из набора. Дополнительно :источник
=
в ,Optional[int] = None
как это соглашение для именованных аргументов нетиповых-намекали?Я недавно видел эту однострочную:
источник
None
значения по умолчанию и последующая проверка внутри метода позволяет избежать этой проблемы, выделяя новый dict при каждом вызове метода.