Se eu tiver uma função como esta:
def foo(name, opts={}):
pass
E eu quero adicionar dicas de tipo aos parâmetros, como faço isso? A maneira que assumi me dá um erro de sintaxe:
def foo(name: str, opts={}: dict) -> str:
pass
O seguinte não gera um erro de sintaxe, mas não parece a maneira intuitiva de lidar com este caso:
def foo(name: str, opts: dict={}) -> str:
pass
Não consigo encontrar nada na typing
documentação ou em uma pesquisa no Google.
Edit: Eu não sabia como os argumentos padrão funcionavam no Python, mas, para o bem desta pergunta, vou manter os exemplos acima. Em geral, é muito melhor fazer o seguinte:
def foo(name: str, opts: dict=None) -> str:
if not opts:
opts={}
pass
scala
linguagem também.Respostas:
Seu segundo caminho está correto.
isso gera
É verdade que não está listado no PEP 484 , mas as dicas de tipo são uma aplicação de anotações de funções, documentadas no PEP 3107. A seção de sintaxe deixa claro que os argumentos das palavras-chave funcionam com as anotações de funções dessa maneira.
Eu desaconselho fortemente o uso de argumentos de palavras-chave mutáveis. Mais informações aqui .
fonte
Se você estiver usando digitação (introduzido no Python 3.5), poderá usar
typing.Optional
, ondeOptional[X]
é equivalenteUnion[X, None]
. É usado para sinalizar que o valor explícito deNone
é permitido. Desde a digitação .fonte
=
,Optional[int] = None
como é a convenção para argumentos de palavras-chave sem sugestões de tipo?Eu vi recentemente essa frase:
fonte
None
o padrão e depois verificar dentro do método evita esse problema, alocando um novo ditado cada vez que o método é chamado.