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ですか?

4

2 に答える 2

3

yieldコルーチンの拡張構文

これを読んでください: http://www.python.org/dev/peps/pep-0342/

于 2013-08-17T08:41:11.643 に答える
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のドキュメントを参照してください。

yieldは Python 2.5 で式になりました。以前は単なるステートメントであり、ジェネレーターの値のみを生成していました。式を作成して(および例外を送信する他のメソッドも)yield追加することにより、ジェネレーターを単純なコルーチンとして使用できるようになりました。この変更の最初の動機については、PEP 342を参照してください。.send()

于 2013-08-17T08:41:51.980 に答える