【问题标题】:Are Python/ES6 Generators also Coroutines?Python/ES6 生成器也是协程吗?
【发布时间】:2015-10-31 17:57:41
【问题描述】:

我对 Python 和 ECMAScript 中的生成器的理解是,它们比普通的生成器更有能力。例如,两者都允许通过next() 将值传递回生成器,并且它们都允许从另一个生成器(Python 中的yield from 和ES6 中的yield *)产生,这两个在生成器中是不需要的。

那么,鉴于此扩展功能,在 Python 和 ES6 中实现的生成器是否与协程相同?有什么不同吗?

【问题讨论】:

  • 请注意,从另一个生成器屈服并不是真正的特性;所有发电机都可以做到这一点。 yield* 只是语法糖。

标签: python generator ecmascript-6 coroutine


【解决方案1】:

来自PEP 380yield from

Python 生成器是协程的一种形式,但它的局限性在于它只能让步给直接调用者。

来自python docs on coroutines

协程是遵循某些约定的生成器。为了 文档目的,所有协程都应该用 @asyncio.coroutine,但这不能严格执行。

生成器是有限协程的一种形式。 ES2015 生成器也应该如此。

【讨论】:

    猜你喜欢
    • 2017-09-02
    • 2011-08-22
    • 2015-10-30
    • 2013-08-02
    • 2015-12-11
    • 2021-04-30
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多