繁体   English   中英

在python 3.6中输入提示生成器

[英]Type hinting generator in python 3.6

根据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将此视为错误吗? 谢谢。


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

在此输入图像描述

所以,我想知道这实际上是PyCharm中的错误还是不支持的功能。

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

生成器函数的返回类型可以通过typing.py模块提供的泛型类型Generator[yield_type, send_type, return_type]进行typing.py

请尝试这种方式:

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的评论,这是一个众所周知的错误。

更多,报道的问题(最新版本的PyCharm)于去年12月提交。 他们可能修复了它并将修改推送到同一版本。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM