How do I annotate types in a for-loop

痞子三分冷 提交于 2019-12-09 07:23:25

问题


I want to annotate a type of a variable in a for-loop. I tried this:

for i: int in range(5):
    pass

But it didn't work, obviously.

What I expect is working autocomplete in PyCharm 2016.3.2. Pre-annotation like this:

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

doesn't help.

P.S. Pre-annotation works for PyCharm >= 2017.1


回答1:


According to PEP 526, this is not allowed:

In addition, one cannot annotate variables used in a for or with statement; they can be annotated ahead of time, in a similar manner to tuple unpacking

Annotate it before the loop:

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

PyCharm 2018.1 and up now recognizes the type of the variable inside the loop. This was not supported in older PyCharm versions.




回答2:


I don't know if this solution is PEP compatible or just a feature of PyCharm but I made it work like this

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

and I'm using Pycharm Community Edition 2016.2.1




回答3:


This works well for my in PyCharm (using Python 3.6)

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



回答4:


None of the responses here were useful, except to say that you can't. Even the accepted answer uses syntax from the PEP 526 document, which isn't valid python syntax. If you try to type in

x: int

You'll see it's a syntax error.

Here is a useful workaround:

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

Do your work with x. PyCharm recognizes its type, and autocomplete works.



来源:https://stackoverflow.com/questions/41641449/how-do-i-annotate-types-in-a-for-loop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!