web-dev-qa-db-ja.com

Pythonのyield式の結果は何ですか?

Yieldは関数をジェネレーターに変換することを知っていますが、yield式自体の戻り値は何ですか?例えば:

def whizbang(): 
    for i in range(10): 
        x = yield i

この関数が実行されるときの変数xの値は何ですか?

Pythonドキュメント: http://docs.python.org/reference/simple_stmts.html#grammar-token-yield_stmt を読んだところ、収量式自体の値については言及されていません。

57
slacy

ジェネレータに値をsendすることもできます。値が送信されない場合、xNoneです。それ以外の場合、xは送信された値を受け取ります。ここにいくつかの情報があります: http://docs.python.org/whatsnew/2.5.html#pep-342-new-generator-features

>>> def whizbang():
        for i in range(10):
            x = yield i
            print 'got sent:', x


>>> i = whizbang()
>>> next(i)
0
>>> next(i)
got sent: None
1
>>> i.send("hi")
got sent: hi
2
61
jamylak