如何在for循环中注释类型?

我想在for-loop中注释变量的类型。我试过了,但没用:

for i: int in range(5):
pass

我期望的是在PyCharm 2016.3.2中工作自动完成,但使用 预注释无效:

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

P.S.预注释适用于PyCharm >= 2017.1。

63507 次浏览

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

此外,一个不能注释forwith中使用的变量 声明< / >强;可以提前对它们进行注释,类似于 元组拆包< / p >

在循环之前注释它:

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

PyCharm 2018.1及以上版本现在识别循环内变量的类型。旧版本的PyCharm不支持这一点。

这里没有一个回答是有用的,除了说你不能。即使是被接受的答案也使用了来自PEP 526文档的语法,这不是有效的python语法。如果你试着输入

x: int

您将看到这是一个语法错误。

这里有一个有用的变通方法:

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

x完成你的工作。PyCharm识别其类型,并自动完成工作。

我不知道这个解决方案是否与pep兼容,或者只是PyCharm的一个功能,但我让它像这样工作:

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

我使用的是Pycharm社区版2016.2.1

这适用于我的PyCharm(使用Python 3.6)

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