Используя аннотации функций Python 3, можно указать тип элементов, содержащихся в однородном списке (или другой коллекции), с целью указания типов в PyCharm и других IDE?
Пример кода псевдо-Python для списка int:
def my_func(l:list<int>):
pass
Я знаю, что можно использовать Docstring ...
def my_func(l):
"""
:type l: list[int]
"""
pass
... но я предпочитаю стиль аннотации, если это возможно.
python
python-3.x
type-hinting
Эрик В.
источник
источник
type object is not subscriptable
при определении функции. Очевидно, вы можете использовать строку:def my_func(L: 'list[int]')
но я не знаю, будет ли PyCharm анализировать ее при синтаксическом'list[int]'
, извиняюсь, если это не ясно.Ответы:
Отвечая на свой вопрос; ответ TLDR -
НетДа .Обновление 2
В сентябре 2015 года был выпущен Python 3.5 с поддержкой Type Hints и новым модулем набора текста . Это позволяет специфицировать типы, содержащиеся в коллекциях. По состоянию на ноябрь 2015 года JetBrains PyCharm 5.0 полностью поддерживает Python 3.5, включая подсказки типов, как показано ниже.
Обновление 1
По состоянию на май 2015 года PEP0484 (Типовые подсказки) был официально принят. Черновик реализации также доступен на github в разделе ambv / typehinting .
Оригинальный ответ
По состоянию на август 2014 года я подтвердил, что нельзя использовать аннотации типов Python 3 для указания типов в коллекциях (например, список строк).
Использование форматированных строк документации, таких как reStructuredText или Sphinx, является жизнеспособной альтернативой и поддерживается различными IDE.
Также похоже, что Гвидо обдумывает идею расширения аннотаций типов в духе mypy: http://mail.python.org/pipermail/python-ideas/2014-August/028618.html
источник
Теперь, когда Python 3.5 официально выпущен, есть модуль поддержки Type Hints
typing
и соответствующийList
«тип» для общих контейнеров.Другими словами, теперь вы можете:
источник
Комментарии типа были добавлены с PEP 484
В настоящее время это работает для меня в PyCharm с Python 3.6.4
Пример изображения в Pycharm
источник
Благодаря поддержке BDFL теперь почти наверняка python (вероятно, 3.5) предоставит стандартизированный синтаксис для подсказок типов через аннотации функций.
https://www.python.org/dev/peps/pep-0484/
Как указано в PEP, существует экспериментальная программа проверки типов (вроде pylint, но для типов) под названием mypy, которая уже использует этот стандарт и не требует какого-либо нового синтаксиса.
http://mypy-lang.org/
источник
Начиная с Python 3.9, встроенные типы являются универсальными по отношению к аннотациям типов (см. PEP 585 ). Это позволяет напрямую указать тип элементов:
Различные инструменты могут поддерживать этот синтаксис до версии Python 3.9. Когда аннотации не проверяются во время выполнения, синтаксис допустим с использованием кавычек или
__future__.annotations
.источник