4
私は送信だが降伏されて値を変更することを期待していた、発電機の送信機能をしようとしているので、私はipythonで試してみました:pythonの "send"メソッドは "next"の値を変更しませんか?
In [17]: def z(n):
...: i=0
...: while(i<n):
...: val=yield i
...: print "value is:",val
...: i+=1
...:
In [24]: z1=z(10)
In [25]: z1.next()
Out[25]: 0
In [26]: z1.send(5) # I was expecting that after "send", output value will become "5"
value is: 5
Out[26]: 1
In [27]: z1.next()
value is: None # I was expecting that z1.next() will restart from "6" because I sent "5"
Out[27]: 2
まあ、私は私は本当にない「送信」何の間違った理解を持っていたと仮定、それを修正する方法?
私はちょうどz1.next()を使うと、数値を表示します。 "print z1.next()"を使用すると、 "value is"ステートメントが表示されます。どうして? – Troskyvs
@Troskyvsあなたの質問への答えが少し更新されました。 – niemmi
ありがとう、私はあなたのポイントを理解し始めました。 "val = yield i"は外側の "send"コマンドからvalが設定され、外側の呼び出し元は "yield i"から戻り値を取得することを意味します。これは、 "next()"が "send(None)"に等しい理由を理解するのは本当に難しいので、valは "None"です。 – Troskyvs