如何在for循环中注释类型

gre*_*ake 55 python for-loop type-hinting pycharm python-3.6

我想在for-loop中注释一个变量类型.我试过这个:

for i: int in range(5):
    pass
Run Code Online (Sandbox Code Playgroud)

但显然它没有用.

我期望在PyCharm 2016.3.2中进行自动完成工作.像这样的预注释:

i: int
for i in range(5):
    pass
Run Code Online (Sandbox Code Playgroud)

没有帮助.

PS预注释适用于PyCharm> = 2017.1

ale*_*cxe 73

根据PEP 526,这是不允许的:

另外,不能注释a forwith 语句中使用的变量 ; 它们可以提前注释,类似于元组解包

在循环之前注释它:

i: int
for i in range(5):
    pass
Run Code Online (Sandbox Code Playgroud)

PyCharm 2018.1及更高版本现在识别循环内部变量的类型.旧的PyCharm版本不支持此功能.

  • 但是会有一个检查信息“不使用局部变量'i'值”。 (3认同)
  • 我正在使用PyCharm 2018.1,现在它识别出这种形式. (2认同)
  • @philologon很好!感谢您的提醒,相应地更新答案. (2认同)
  • 这对于解包两个多个对象的 for 循环也很有效:例如 `key: str df: pd.DataFrame for key, df in myData.items(): ...` (2认同)

小智 30

我不知道这个解决方案是PEP兼容还是只是PyCharm的一个功能,但我让它像这样工作

for i in range(5): #type: int
  pass
Run Code Online (Sandbox Code Playgroud)

我正在使用Pycharm Community Edition 2016.2.1

  • 这种形式也适用于 for/enumerate 循环和 PyCharm 2018。例如 `for index, area in enumerate(area_list): # type: int, AreaInfo` (5认同)
  • 仅供参考:PEP 484中明确允许/提及了这种格式(也与python 2.7兼容) (3认同)
  • 谢谢,但我会坚持PEP 526选项 (2认同)
  • 根据 [PEP 484](https://www.python.org/dev/peps/pep-0484/#id41),这也是一个有效选项 (2认同)

小智 9

这对我的PyCharm(使用Python 3.6)效果很好

for i in range(5):
    i: int = i
    pass
Run Code Online (Sandbox Code Playgroud)

  • 不要重新定义变量。`i: int` 就足够了,你不会收到任何抱怨。 (4认同)
  • 如果您在 for 循环中重新定义变量,MyPy 实际上会抱怨 (2认同)