【问题标题】:Python generators - float( ( yield ) )?Python 生成器 - 浮点((产量))?
【发布时间】:2013-08-17 08:33:50
【问题描述】:

我正在阅读以下关于 Python 生成器的教程 http://excess.org/article/2013/02/itergen2/

它包含以下代码:

def running_avg():
    "coroutine that accepts numbers and yields their running average"
    total = float((yield))
    count = 1
    while True:
        i = yield total / count
        count += 1
        total += i

我不明白float((yield)) 的含义。我认为yield 用于从生成器“返回”一个值。这是yield 的不同用法吗?

【问题讨论】:

标签: python generator yield


【解决方案1】:

它是协程的扩展 yield 语法

阅读: http://www.python.org/dev/peps/pep-0342/

【讨论】:

    【解决方案2】:

    是的,yield 也可以接收,通过发送到生成器:

    >>> avg_gen = running_avg()
    >>> next(avg_gen)  # prime the generator
    >>> avg_gen.send(1.0)
    1.0
    >>> print avg_gen.send(2.0)
    1.5
    

    传递给generator.send() method 的任何值都由yield 表达式返回。请参阅yield expressions 文档。

    yield 在 Python 2.5 中成为表达式;在它只是一个语句并且只为生成器生成值之前。通过使yield 成为表达式并添加.send()(以及其他发送异常的方法),生成器现在可以像简单的coroutines 一样使用;请参阅 PEP 342 了解此更改的最初动机。

    【讨论】:

      猜你喜欢
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 2019-04-10
      • 2020-06-10
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多