python 3.6中的类型提示生成器

2024-04-28 16:32:03 发布

您现在位置:Python中文网/ 问答频道 /正文

根据PEP-484,我们应该能够按如下方式键入暗示生成器函数:

from typing import Generator

def generate() -> Generator[int, None, None]:
    for i in range(10):
        yield i

for i in generate():
    print(i)

然而,列表理解在PyCharm中给出了以下错误。

Expected 'collections.Iterable', got 'Generator[int, None, None]' instead less... (⌘F1)

你知道为什么皮查姆认为这是个错误吗?谢谢您。


在阅读了一些答案后进行了一些澄清。我正在使用PyCharm社区版2016.3.2(最新版本),并已导入typing.Generator(在代码中更新)。上面的代码运行得很好,但是PyCharm认为这是一个错误:

enter image description here

所以,我想知道这是否是PyCharm中的一个错误或不支持的功能。


Tags: 函数infromimportnonetypingfor键入
2条回答

正如Oleksandr Dashkov所评论的,我用Pycharm 2017.1eap尝试了相同的代码,它正确地处理了这个注释。我想这个功能将被整合到下一个正式版本的PyCharm中。谢谢大家。

您需要导入typing模块。根据文件:

The return type of generator functions can be annotated by the generic type Generator[yield_type, send_type, return_type] provided by typing.py module

请改为这样做:

from typing import Generator


def generate() -> Generator[int, None, None]:
    for i in range(10):
        yield i

以上将得到所需的结果:

l = [i for i in generate()]

输出:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


正如评论中指出的,您可能不会使用PyCharm的最后一个版本。尝试切换到2016.3.2版本,您可能会没事。不幸的是,根据@AshwiniChaudhary的评论,这是一个众所周知的bug。

此外,报告的问题(为最后一个版本的PyCharm)是在去年12月提交的。他们可能修复了它,并将修改推到了同一版本中。

相关问题 更多 >