[英]Python next and send in same generator
根據我對yield
理解,我寫的這段python表現並不像我期望的那樣。 也許有人可以啟發我。
def printvar():
yield 3
data = yield
print(data)
data = yield
print(data)
x = printvar()
print(next(x))
x.send(4)
x.send(5)
我期待的是:
3
4
5
我得到了什么:
3
5
誰能解釋這種行為?
有兩個問題。 一個是通過將發生器推進三次,你只需將它提升到最后的產量,而不是之后的代碼。 另一個是send
將其值作為yield語句的值,其中執行先前被暫停,而不是在下一個。 以下是對所發生情況的逐步說明:
next
的第一次調用會執行第一次yield 3
。 send(4)
下一次調用會導致yield 3
計算為4,但是您在printvar
沒有對此進行任何printvar
,因此該值將被丟棄。 .send(4)
也將生成器前進到第一個data = yield
,得到None。 .send(5)
下一次調用會導致第一個 data = yield
將數據設置為5,並將生成器前進到最后一個yield,再次產生None。 yield
保持停止,從不執行最后一次print
。 使用send
時要記住的事情是它將值發送到已經產生的位置,而不是它接下來要產生的位置。 有關更多說明,請參閱此類似問題 。
嘗試這個:
def printvar():
data = yield 3
print(data)
data = yield
print(data)
x = printvar()
print(next(x))
x.send(4)
x.send(5)
在你的原始代碼中,send(4)無處可去,因為yield語句沒有收集任何東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.