185 votes

Comment annoter des types dans une boucle for

Je veux annoter un type de variable dans une boucle for . J'ai essayé ceci:

 for i: int in range(5):
    pass
 

Mais cela n'a pas fonctionné, évidemment.

Ce que j'attends, c'est la saisie semi-automatique dans PyCharm 2016.3.2. Pré-annotation comme ceci:

 i: int
for i in range(5):
    pass
 

n'aide pas.

La pré-annotation PS fonctionne pour PyCharm> = 2017.1

266voto

alecxe Points 50783

Selon PEP 526, ce n'est pas permis:

En outre, on ne peut annoter les variables utilisées dans un for ou with déclaration; ils peuvent être annotées à l'avance, de manière similaire à tuple déballage

Annotations à l'avant de la boucle:

i: int
for i in range(5):
    pass

PyCharm 2018.1 et jusqu'à maintenant, reconnaît le type de la variable à l'intérieur de la boucle. Ce n'était pas pris en charge dans les anciennes PyCharm versions.

65voto

David Vasquez Points 191

Je ne sais pas si cette solution est compatible PEP ou juste une fonctionnalité de PyCharm mais je l'ai fait fonctionner comme ça

 for i in range(5): #type: int
  pass
 

et j'utilise Pycharm Community Edition 2016.2.1

18voto

Samir Points 29

Cela fonctionne bien pour mon dans PyCharm (en utilisant Python 3.6)

 for i in range(5):
    i: int = i
    pass
 

-7voto

Edward Ned Harvey Points 405

Aucune des réponses ici n'a été utile, sauf pour dire que vous ne pouvez pas. Même la réponse acceptée utilise la syntaxe du document PEP 526, qui n'est pas une syntaxe python valide. Si vous essayez de taper

 x: int
 

Vous verrez que c'est une erreur de syntaxe.

Voici une solution de contournement utile:

 for __x in range(5):
    x = __x  # type: int
    print(x)
 

Faites votre travail avec x . PyCharm reconnaît son type et les travaux de saisie semi-automatique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X