python3 生成器的send_Python:生成器中send()的行为
我在
python 3中嘗試使用生成器并編寫了這個相當人為的生成器:
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 __()到達x = yield 1并且得到1.我認為x將被賦值為None,然后gen.send()會查找下一個yield語句,因為x = yield 1是“used”,然后得到一個StopIteration.
相反,似乎發生的事情是x被發送“一個字符串”,打印出來,然后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
但現在沒有錯誤.在將x分配給None之后,send()似乎沒有嘗試查找下一個yield語句.
為什么行為略有不同?這與我如何啟動發電機有關嗎?
總結
以上是生活随笔為你收集整理的python3 生成器的send_Python:生成器中send()的行为的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php mysql增改删_PHP分享:如
- 下一篇: websocket python爬虫_p