私は、Python 3に発電機で実験し、このかなり不自然ジェネレータを書いた:のPython:ジェネレーターで送信()の挙動
def send_gen():
print(" send_gen(): will yield 1")
x = yield 1
print(" send_gen(): sent in '{}'".format(x))
# yield # causes StopIteration when left out
gen = send_gen()
print("yielded {}".format(gen.__next__()))
print("running gen.send()")
gen.send("a string")
出力:
send_gen(): will yield 1
yielded 1
running gen.send()
send_gen(): sent in 'a string'
Traceback (most recent call last):
File "gen_test.py", line 12, in <module>
gen.send("a string")
StopIteration
のでgen.__next__()
がラインに到達しx = yield 1
し、私はがNone
に割り当てられると思ったが、gen.send()
はの次にyield
という文を探すだろうから、x = yield 1
は「used」、、次にはStopIteration
となります。
代わりに、何が起こっていると思わx
は、次のyield
を探すためのpythonを試み、その後その後、印刷された「文字列」、を送信しStopIteration
を取得してしまうことです。
だから私はこれを試してください:出力
def send_gen():
x = yield 1
print(" send_gen(): sent in '{}'".format(x))
gen = send_gen()
print("yielded : {}".format(gen.send(None)))
:
yielded : 1
しかし、今はエラーはありません。 send()
は、x
にNone
を割り当てた後にの次のyield
のステートメントを検索しようとしていないようです。
動作が若干異なるのはなぜですか?これは私がどのように発電機を始動したかと関係がありますか?
ああ、私は参照してください。 'x = ...'の説明は多くの助けになりました。ありがとう! – peonicles