163

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

for i: int in range(5):
    pass

我期望在 PyCharm 2016.3.2 中使用自动完成功能,但使用预注释不起作用:

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

PS 预注释适用于 PyCharm >= 2017.1。

4

4 回答 4

234

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

此外,不能注释fororwith 语句中使用的变量;它们可以提前注释,类似于元组拆包

在循环之前对其进行注释:

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

PyCharm 2018.1 及更高版本现在可以识别循环内变量的类型。这在旧版 PyCharm 中不受支持。

于 2017-01-13T18:49:48.900 回答
59

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

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

我正在使用 Pycharm 社区版 2016.2.1

于 2017-07-12T16:49:36.490 回答
18

这适用于我在 PyCharm 中(使用 Python 3.6)

for i in range(5):
    i: int = i
    pass
于 2017-09-11T16:11:23.883 回答
-5

除了说你不能,这里的任何回应都没有用。即使是接受的答案也使用 PEP 526 文档中的语法,这不是有效的 python 语法。如果您尝试输入

x: int

你会看到这是一个语法错误。

这是一个有用的解决方法:

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

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

于 2017-06-06T14:33:58.390 回答