pycharm 如何在for循环中注解类型?

9rnv2umw  于 2023-04-06  发布在  PyCharm
关注(0)|答案(5)|浏览(169)

我想在一个for-循环中注解一个变量的类型。我尝试了这个方法,但它不起作用:

for i: int in range(5):
    pass

我希望在PyCharm 2016.3.2中使用自动完成,但使用预注解不起作用:

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

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

xiozqbni

xiozqbni1#

根据PEP 526,这是不允许的:
此外,不能注解forwith语句中使用的变量;它们可以以类似于元组解包的方式提前注解
在循环之前注解它:

i: int
for i in range(5):
    pass
  • PyCharm 2018.1及更高版本 * 现在可以识别循环中变量的类型。旧版本的PyCharm不支持此功能。
5sxhfpxr

5sxhfpxr2#

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

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

使用Pycharm社区版2016.2.1

hrysbysz

hrysbysz3#

这对于我在PyCharm中的工作很好(使用Python 3.6)

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

66bbxpm54#

虽然我更喜欢尽可能使用类型提示,但使用assert isinstance(...)可能是实现相同好处的替代解决方案/工作区(即:我不知道这在PyCharm中是否有效,但它在Visual Studio Code中确实有效。

for x, y, z in range(5):
    assert isinstance(i, int)
    # Now VS Code knows the type of `i`, so syntax highlighting
    # and auto-completion do work as intended :-)

显然,添加assert会对代码产生影响,这可能是好事也可能是坏事,具体取决于你的用例。它肯定不同于类型提示,但作为副作用,它似乎有相同的好处。

i5desfxk

i5desfxk5#

这里没有一个回答是有用的,除了说你不能。甚至接受的答案使用的语法来自PEP526文档,这是无效的python语法。如果你试图输入

x: int

你会发现这是一个语法错误。
下面是一个有用的解决方法:

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

使用x进行工作。PyCharm可以识别其类型,并自动完成。

相关问题