2017-01-13 9 views
3

Я хочу аннотировать тип переменной в for -loop. Я попытался это:Как аннотировать типы в for-loop

Но это не сработало, очевидно.

Что я ожидаю, это рабочий автозаполнение в PyCharm 2016.3.2. Pre-аннотацию, как это:

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

не помогает.

P.S. Pre-аннотации работают PyCharm> = 2017,1

ответ

7

Согласно PEP 526, это не допускается:

Кроме того, один не может аннотировать переменные, используемые в for или with заявления; они могут быть аннотированными загодя, аналогичным образом кортежа распаковки

аннотации перед циклом:

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

Что касается поддержки PyCharm, я имею в настоящее время последний 2017.2 EAP и я не вижу, что PyCharm признает тип переменной i внутри цикла:

enter image description here

Но это не распознает тип, если используется вне цикла:

enter image description here

Это выглядит как ошибка для меня, подумать о его к PyCharm Issue Tracker.

+0

Я пробовал, но он, похоже, не работает в последнем стабильном PyCharm. По крайней мере, я не получаю никакого автозаполнения. –

+0

@ A.Yurchenko да, у меня 2017.2 и не вижу, чтобы автозаполнение распознавало 'i' как целое число внутри цикла (но оно распознано вне цикла). Похоже, проблема PyCharm на данный момент, позвольте мне выкопать ее больше. Благодарю. – alecxe

+0

Я могу подтвердить, он работает и Visual Studio. Большое спасибо! – Soaku

0

Ни один из ответов здесь не был полезен, кроме как сказать, что вы не можете. Даже принятый ответ использует синтаксис из документа PEP 526, который не является допустимым синтаксисом python. Если вы попытаетесь ввести

x: int 

Вы увидите, что это синтаксическая ошибка.

Вот полезный обходной путь:

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

Сделайте свою работу с x. PyCharm распознает его тип, и автозаполнение работает.

+5

Это действительный синтаксис, по крайней мере, для python 3.6. См. [PEP 526] (https://www.python.org/dev/peps/pep-0526/#global-and-local-variable-annotations) –

7

Я не знаю, если это решение PEP совместимо или просто особенность PyCharm, но я сделал его работу, как этот

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

и я использую PyCharm Community Edition 2016.2.1

+1

Спасибо, но я буду придерживаться опции PEP 526 –

+0

Хотя он не совместим с PEP 526, он работает в PyCharm (по крайней мере, с 2017.2.1) и имеет дополнительное преимущество, также работая в Python 3.0-3.5 (который не поддерживает синтаксис предварительного аннотации, представленный в Python 3.6). – phoenix

2

Это хорошо работает для моего в PyCharm (используя Python 3.6)

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

 Смежные вопросы

  • Нет связанных вопросов^_^