python3 生成器的send_Python:生成器中send()的行为
我在
python 3中嘗試使用生成器并編寫了這個(gè)相當(dāng)人為的生成器:
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
gen.send("a string")
StopIteration
所以gen .__ next __()到達(dá)x = yield 1并且得到1.我認(rèn)為x將被賦值為None,然后gen.send()會(huì)查找下一個(gè)yield語句,因?yàn)閤 = yield 1是“used”,然后得到一個(gè)StopIteration.
相反,似乎發(fā)生的事情是x被發(fā)送“一個(gè)字符串”,打印出來,然后python嘗試尋找下一個(gè)產(chǎn)量并得到一個(gè)StopIteration.
所以我試試這個(gè):
def send_gen():
x = yield 1
print(" send_gen(): sent in '{}'".format(x))
gen = send_gen()
print("yielded : {}".format(gen.send(None)))
輸出:
yielded : 1
但現(xiàn)在沒有錯(cuò)誤.在將x分配給None之后,send()似乎沒有嘗試查找下一個(gè)yield語句.
為什么行為略有不同?這與我如何啟動(dòng)發(fā)電機(jī)有關(guān)嗎?
總結(jié)
以上是生活随笔為你收集整理的python3 生成器的send_Python:生成器中send()的行为的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php mysql增改删_PHP分享:如
- 下一篇: python3协程 queue_使用ge