web-dev-qa-db-fra.com

Python 3 Annotations: Type suggérant une liste d'un type spécifié (PyCharm)

En utilisant les annotations de fonction de Python 3, il est possible de spécifier le type des éléments contenus dans une liste homogène (ou une autre collection) aux fins de repérage des types dans PyCharm et d'autres IDE?

Un exemple de code pseudo-python pour une liste de int:

def my_func(l:list<int>):
    pass



Je sais que c'est possible avec Docstring ...

def my_func(l):
    """
    :type l: list[int]
    """
    pass

... mais je préfère le style d'annotation si c'est possible.

85
Eric W.

Répondre à ma propre question; la réponse TLDR est Non  Oui .

Mise à jour 2

En septembre 2015, Python 3.5 a été publié avec une prise en charge des indications de type et inclut un module nouveau typing . Cela permet de spécifier les types contenus dans les collections. Depuis novembre 2015, JetBrains PyCharm 5.0 prend pleinement en charge Python 3.5 pour inclure les conseils de type, comme illustré ci-dessous.

PyCharm 5.0 Code Completion using Type Hints

Mise à jour 1

En date de mai 2015, PEP0484 (indications de type) a été formellement accepté. Le projet d’implémentation est également disponible à l’adresse github sous ambv/typehinting .

Réponse originale

Depuis août 2014, j'ai confirmé qu'il n'était pas possible d'utiliser Python 3 annotations de types pour spécifier des types dans des collections (ex: une liste de chaînes).

L'utilisation de docstrings formatés tels que reStructuredText ou Sphinx est une alternative viable et prise en charge par divers IDE.

Il semble également que Guido réfléchisse à l’idée d’étendre des annotations de type dans l’esprit de mypy: http://mail.python.org/pipermail/python-ideas/2014-August/028618.html

113
Eric W.

Maintenant que Python 3.5 est officiellement sorti, il existe un module prenant en charge les astuces de types - typing et le correspondant List "type" pour les conteneurs génériques.

En d'autres termes, maintenant vous pouvez faire:

from typing import List

def my_func(l: List[int]):
    pass
45
alecxe

Avec le soutien du BDFL, il est presque certain que python (probablement 3.5) fournira une syntaxe normalisée pour les indications de type via des annotations de fonctions.

https://www.python.org/dev/peps/pep-0484/

Comme indiqué dans le PEP, il existe un vérificateur de type expérimental (un peu comme pylint, mais pour les types) appelé mypy qui utilise déjà cette norme et ne nécessite aucune nouvelle syntaxe.

http://mypy-lang.org/

4
Brendan Abel

Des commentaires de type ont été ajoutés depuis PEP 484

active_monitors = [] # type: List[Monitor]

Cela fonctionne actuellement pour moi sur PyCharm avec Python 3.6.4

Exemple d'image dans Pycharm

2
CoreCreatives