Python生成器 - float((yield))?

4
我正在阅读有关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 的另一种用法吗?

http://docs.python.org/2/reference/expressions.html#generator-iterator-methods - Ashwini Chaudhary
2个回答

3

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() 方法 的值都会被 yield 表达式返回。请参阅 yield 表达式 文档。
在 Python 2.5 中,yield 成为了表达式;在此之前它只是一个语句,并且仅为生成器生成值。通过将 yield 变成一个表达式并添加 .send()(以及其他发送异常的方法),现在可以将生成器用作简单的 协程;有关此更改的最初动机,请参见 PEP 342

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接