Подтвердить что ты не робот

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

... но я предпочитаю стиль аннотации, если это возможно.

4b9b3361

Ответ 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/