我对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/

10-13 06:27