![](/img/trans.png)
[英]Python 3.6 type hinting for a function accepting generic class type and instance type of the same generic type
[英]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.