我不明白为什么我的生成器没有返回值=11,下面是我的代码:
def monG(borneinf,bornesup):
while True:
if bornesup < borneinf:
bornesup, borneinf = borneinf, bornesup
borneinf += 1
if borneinf==bornesup:
break
x=(yield borneinf)
if x is not None:
borneinf = x
c=monG(2,10)
for a in c:
if a==5:
c.send(20)
print(a)
输出:
3
4
5
12
13
14
15
16
17
18
19
让我们更仔细地追踪一下行动:
这给我们在
c.send
行上提供了一个特殊的标记,以及在yield
行之前的一个预览输出:
正如
MisterMiyagi
所指出的,yield
确实返回11,但是您将它扔掉了。也许您想将该值赋给a
,尽管混用循环参数是一种明确的代码味道。如果你做了这个赋值,你就在迭代中打印出11
,而不是5
。你知道吗我认为您的基本问题是您干扰了您的迭代流,在循环中强制了一个额外的
yield
。在您编码的循环中,隐式的yield
意味着您在连续的迭代中不能同时得到5
和11
。你知道吗因为在任何情况下你都会增加价值!你知道吗
添加“else”块:
像这样:
输出:
相关问题 更多 >
编程相关推荐