Python 3 Аннотации: Тип, указывающий список указанного типа (PyCharm)
Используя аннотации функций Python 3, можно указать тип элементов, содержащихся в однородном списке (или другой коллекции) с целью указания типа в PyCharm и других IDE?
Пример кода псевдо-питона для списка int:
def my_func(l:list<int>):
pass
Я знаю, что это возможно с помощью Docstring...
def my_func(l):
"""
:type l: list[int]
"""
pass
... но я предпочитаю стиль аннотации, если это возможно.
Ответы
Ответ 1
Отвечая на мой вопрос; ответ TL;DR: No Да.
Оригинальный ответ
По состоянию на август 2014 года я подтвердил, что аннотации типа Python 3 не могут указывать типы внутри коллекций (например, список строк).
Использование форматированных docstrings, таких как reStructuredText или Sphinx, является жизнеспособными альтернативами и поддерживается различными IDE.
Также кажется, что Гвидо размышляет над идеей расширения аннотаций типа в духе mypy: http://mail.python.org/pipermail/python-ideas/2014-August/028618.html
Обновлено 1
По состоянию на май 2015 года PEP0484 (Type Hints) было официально принято. Проект реализации также доступен в github под управлением ambv/typehinting.
Обновление 2
В сентябре 2015 года Python 3.5 был выпущен с поддержкой Type Hints и включает новый модуль ввода . Это позволяет специфицировать типы, содержащиеся в коллекциях. По состоянию на ноябрь 2015 года JetBrains PyCharm 5.0 полностью поддерживает Python 3.5, чтобы включить Type Hints, как показано ниже.
![Завершение кода PyCharm 5.0 с использованием подсказок типа]()
Ответ 2
Теперь, когда Python 3.5 официально отсутствует, существует поддерживающий модуль Type Hints - typing
и соответствующий List
"type" для общих контейнеров.
Другими словами, теперь вы можете сделать:
from typing import List
def my_func(l: List[int]):
pass
Ответ 3
При поддержке BDFL почти наверняка теперь, что python (возможно, 3.5) предоставит стандартизованный синтаксис для типов подсказок через аннотации функций.
https://www.python.org/dev/peps/pep-0484/
Как указано в PEP, существует экспериментальная проверка типов (вроде как pylint, но для типов), называемая mypy, которая уже использует этот стандарт, и не требует никакого нового синтаксиса.
http://mypy-lang.org/