Wie kommentiere ich Typen in einer for-Schleife?


98

Ich möchte einen Variablentyp in einer forSchleife mit Anmerkungen versehen. Ich habe es versucht:

for i: int in range(5):
    pass

Aber es hat offensichtlich nicht funktioniert.

Was ich erwarte, ist die automatische Vervollständigung in PyCharm 2016.3.2. Voranmerkung wie folgt:

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

hilft nicht.

PS Die Voranmerkung funktioniert für PyCharm> = 2017.1


Nur eine Bemerkung: Normalerweise sollten Sie es nicht benötigen, da der Typ aus der Bereichsfunktion abgeleitet wird (dies ist für alle internen deklarierten Variablen relevant)
— gdoumenc

Antworten:


130

Nach PEP 526 ist dies nicht zulässig:

Außerdem kann man keine Variablen kommentieren, die in einer foroder with -Anweisung verwendet werden . Sie können vorab mit Anmerkungen versehen werden, ähnlich wie beim Auspacken von Tupeln

Kommentieren Sie es vor der Schleife:

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

PyCharm 2018.1 und höher erkennt jetzt den Typ der Variablen in der Schleife. Dies wurde in älteren PyCharm-Versionen nicht unterstützt.


1
Ich habe es versucht, aber es scheint im letzten stabilen PyCharm nicht zu funktionieren. Ich bekomme zumindest keine automatische Vervollständigung.
— Grepcake

2
Ich verwende PyCharm 2018.1 und es erkennt jetzt dieses Formular.
— Philologon

2
@philologon schön! Vielen Dank für Heads-Ups, die Antwort entsprechend aktualisiert.
— Alecxe

3
Aber es wird eine Inspektionsinformation geben Local variable 'i' value is not used.
— Simin Jie

1
Das iIn i: intwird auch dann nicht verwendet, wenn Sie es iin der Schleife verwenden. Ich denke, das ist ein Fehler für diese Art von Annotation.
— Simin Jie

39

Ich weiß nicht, ob diese Lösung PEP-kompatibel ist oder nur eine Funktion von PyCharm, aber ich habe dafür gesorgt, dass es so funktioniert

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

und ich verwende Pycharm Community Edition 2016.2.1


2
Vielen Dank, aber ich bleibe bei der Option PEP 526
— grepcake

Obwohl dies nicht PEP 526-kompatibel ist, funktioniert dies in PyCharm (mindestens ab 2017.2.1) und hat den zusätzlichen Vorteil, dass es auch in Python 3.0-3.5 funktioniert (das die in Python 3.6 eingeführte Voranmerkungssyntax nicht unterstützt).
— Phoenix

5
Zu Ihrer Information: Dieses Format ist ausdrücklich in PEP 484 erlaubt / erwähnt (auch um mit Python 2.7 kompatibel zu sein)
— Claude

1
Dies ist auch eine gültige Option gemäß PEP 484
— Marco

Dieses Formular funktioniert auch mit for / enumerate-Schleifen und PyCharm 2018. zBfor index, area in enumerate(area_list): # type: int, AreaInfo
— simpleuser

13

Dies funktioniert gut für meine in PyCharm (mit Python 3.6)

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

Ich denke, dies sollte die akzeptierte Antwort sein, da dies genau das tut, was angefordert wurde, und keine anderen Fehler und / oder Warnungen ausgibt, im Gegensatz zu der derzeit akzeptierten.
— Jani Kärkkäinen

2
MyPy beschwert sich tatsächlich, wenn Sie die Variable in der for-Schleife neu definieren
— Giovanni Di Milia

3
Definieren Sie die Variable nicht neu. i: intist genug und Sie werden keine Beschwerden bekommen.
— user136036

-4

Keine der Antworten hier war nützlich, außer zu sagen, dass Sie nicht können. Sogar die akzeptierte Antwort verwendet die Syntax aus dem PEP 526-Dokument, die keine gültige Python-Syntax ist. Wenn Sie versuchen einzugeben

x: int

Sie werden sehen, dass es sich um einen Syntaxfehler handelt.

Hier ist eine nützliche Problemumgehung:

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

Mach deine Arbeit mit x. PyCharm erkennt seinen Typ und die automatische Vervollständigung funktioniert.


10
Zumindest für Python 3.6 ist die Syntax gültig. Siehe PEP 526
— Grepcake

1
Nicht gerade falsch, aber das ist Codierung ohne Liebe;)
— Leo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.