最初(PEP 380)引入了yield from
语法,用于委托给“子生成器”。后来它与现在基于deprecated生成器的协同例程一起使用
我不知道通常可以应用于什么类型的对象yield from
。我的第一个猜想是,它只需要对象上的__iter__
方法就可以返回迭代器。实际上,以下内容适用于Python 3.8:
class C:
def __init__(self, n):
self.n = n
def __iter__(self):
return iter(range(self.n))
def g(n):
yield from C(n)
print(tuple(g(3)))
但是,它也可以处理一些等待项,比如asyncio.sleep(1)
,它们没有__iter__
方法
一般规则是什么?什么决定一个对象是否可以作为yield from
形式的参数
您可以检查CPython evaluates that statement的性能。由此可知,它需要是一个协同程序或一个iterable:
相关问题 更多 >
编程相关推荐