Usando as anotações de função do Python 3, é possível especificar o tipo de itens contidos em uma lista homogênea (ou outra coleção) para fins de sugestão de tipo no PyCharm e outros IDEs?
Um exemplo de código pseudo-python para uma lista de int:
def my_func(l:list<int>):
pass
Eu sei que é possível usando Docstring ...
def my_func(l):
"""
:type l: list[int]
"""
pass
... mas eu prefiro o estilo de anotação, se possível.
python
python-3.x
type-hinting
Eric W.
fonte
fonte
type object is not subscriptable
ao definir a função. Obviamente, você pode usar uma string:def my_func(L: 'list[int]')
mas não sei se o PyCharm irá analisá-la enquanto analisa as docstrings ...'list[int]'
, desculpas se não ficou claro.Respostas:
Respondendo minha própria pergunta; a resposta do TLDR é
NãoSim .Atualização 2
Em setembro de 2015, Python 3.5 foi lançado com suporte para Type Hints e inclui um novo módulo de digitação . Isso permite a especificação dos tipos contidos nas coleções. Desde novembro de 2015, JetBrains PyCharm 5.0 oferece suporte total ao Python 3.5 para incluir dicas de tipo conforme ilustrado abaixo.
Atualização 1
Em maio de 2015, PEP0484 (Dicas de tipo) foi formalmente aceito. O rascunho da implementação também está disponível no github em ambv / typehinting .
Resposta Original
Em agosto de 2014, confirmei que não é possível usar anotações de tipo Python 3 para especificar tipos dentro de coleções (ex: uma lista de strings).
O uso de docstrings formatados, como reStructuredText ou Sphinx, são alternativas viáveis e suportadas por vários IDEs.
Parece também que Guido está refletindo sobre a ideia de estender as anotações de tipo no espírito de mypy: http://mail.python.org/pipermail/python-ideas/2014-August/028618.html
fonte
Agora que o Python 3.5 foi lançado oficialmente, existe o módulo de suporte Type Hints -
typing
eList
"tipo" para os contêineres genéricos.Em outras palavras, agora você pode fazer:
fonte
Comentários de tipo foram adicionados desde PEP 484
Atualmente, isso está funcionando para mim no PyCharm com Python 3.6.4
Exemplo de imagem em Pycharm
fonte
Com o suporte do BDFL, é quase certo agora que o python (provavelmente 3.5) fornecerá uma sintaxe padronizada para dicas de tipo por meio de anotações de função.
https://www.python.org/dev/peps/pep-0484/
Conforme referenciado no PEP, existe um verificador de tipo experimental (tipo pylint, mas para tipos) chamado mypy que já usa esse padrão e não requer nenhuma nova sintaxe.
http://mypy-lang.org/
fonte
A partir do Python 3.9, os tipos embutidos são genéricos em relação às anotações de tipo (consulte PEP 585 ). Isso permite especificar diretamente o tipo de elementos:
Várias ferramentas podem oferecer suporte a essa sintaxe anterior ao Python 3.9. Quando as anotações não são inspecionadas em tempo de execução, a sintaxe é válida usando aspas ou
__future__.annotations
.fonte