Gil*_*pie 2 python yield send next
根据我的理解,我写的这段python表现并不像我期望的那样yield.也许有人可以启发我.
def printvar():
yield 3
data = yield
print(data)
data = yield
print(data)
x = printvar()
print(next(x))
x.send(4)
x.send(5)
Run Code Online (Sandbox Code Playgroud)
我期待的是:
3
4
5
Run Code Online (Sandbox Code Playgroud)
我得到了什么:
3
5
Run Code Online (Sandbox Code Playgroud)
谁能解释这种行为?
有两个问题.一个是通过将发生器推进三次,你只需将它提升到最后的产量,而不是之后的代码.另一个是send将其值作为yield语句的值,其中执行先前被暂停,而不是在下一个.以下是对所发生情况的逐步说明:
next执行第一次yield 3.send(4)导致yield 3评估为4的原因,但是您没有对此进行任何操作printvar,因此该值将被丢弃. .send(4)也将发电机推进到第一个data = yield,产生无..send(5)导致第一次 data = yield将数据设置为5,并将生成器推进到最后一次生成,再次产生None.yield,从不执行最后一次print.使用时需要记住的send是它将值发送到已经产生的位置,而不是发送到下一个产生的位置.有关更多说明,请参阅此类似问题.
| 归档时间: |
|
| 查看次数: |
197 次 |
| 最近记录: |