Добавление значения параметра по умолчанию с подсказкой типа в Python


если у меня есть такая функция:

def foo(name, opts={}):
  pass

и я хочу добавить подсказки типа к параметрам, как это сделать? То, как я предполагал, дает мне синтаксическую ошибку:

def foo(name: str, opts={}: dict) -> str:
  pass

следующее не вызывает синтаксическую ошибку, но это не похоже на интуитивный способ обработки этого случая:

def foo(name: str, opts: dict={}) -> str:
  pass

Я ничего не могу найти в typing документация или в поиске Google.

Edit: я не знал, как работают аргументы по умолчанию в Python, но ради этого вопроса, я буду держать примеры выше. В общем, гораздо лучше сделать следующее:

def foo(name: str, opts: dict=None) -> str:
  if not opts:
    opts={}
  pass
1 70

1 ответ:

ваш второй способ правильный.

def foo(opts: dict = {}):
    pass

print(foo.__annotations__)

выводит

{'opts': <class 'dict'>}

это правда, что это не указано в PEP 484, но подсказки типа-это приложение аннотаций функций, которые задокументированы в PEP 3107. синтаксис раздел дает понять, что аргументы ключевых слов работают с аннотациями функций таким образом.

я настоятельно рекомендую не использовать изменяемые аргументы ключевых слов. Подробная информация здесь.