在Python 3.6中,我可以在协程中使用yield
。但是我无法使用yield from
。
以下是我的代码。在第3行,我等待另一个协程。在第4行,我尝试yield from
一个文件。为什么Python 3.6不允许我这样做?
async def read_file(self, filename):
with tempfile.NamedTemporaryFile(mode='r', delete=True, dir='/tmp', prefix='sftp') as tmp_file:
await self.copy_file(filename, tmp_file)
yield from open(tmp_file)
以下是Python 3.6为上述代码引发的异常:
File "example.py", line 4
yield from open(tmp_file)
^
SyntaxError: 'yield from' inside async function
答案 0 :(得分:14)
根据PEP 525,它介绍了Python 3.6中的异步生成器:
异步
yield from
虽然理论上可以实现
对于异步生成器,yield from
支持 异步生成器,它需要严肃的重新设计 发电机实施。
yield from
也不那么重要了 没有必要提供实施另一种机制 协同程序顶部的协程协议。并组成异步 生成器可以使用简单的async for
循环:async def g1(): yield 1 yield 2 async def g2(): async for v in g1(): yield v
正如你所看到的,答案归结为"它实施起来太难了,而你无论如何都不需要它#34;。