我对Python和ECMAScript中的生成器的理解是,它们比普通生成器更强大。例如,两者都允许值通过next()
传递回生成器,并且都允许从另一个生成器(Python中的yield from
和ES6中的yield *
)进行屈服,这是生成器不需要的两件事。
那么,有了这种扩展功能,在Python和ES6中实现的生成器是否在所有目的和用途上都与协程相同?有什么区别吗?
最佳答案
从yield from
上的PEP 380:
Python生成器是协程的一种形式,但是它的局限性在于它只能屈服于其直接调用者。
从python docs on coroutines
协程是遵循某些约定的生成器。对于
出于文档目的,所有协程都应饰以
@ asyncio.coroutine,但这不能严格执行。
生成器是有限的例程的一种形式。 ES2015生成器也应如此。
关于python - Python/ES6生成器也是协程吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31892128/