最初(PEP 380),yield from
引入语法以用于委托给“子生成器”。后来它与现在已弃用的基于生成器的协程一起使用。
我无法找出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
形式的参数给出?