如何理解功能repeater2
和repeater3
?
def repeater1(value):
new = (yield value)
def repeater2(value):
while True:
new = (yield value)
def repeater3(value):
while True:
new = (yield value)
if new is not None:value = new
r1,r2,r3 = repeater1(1),repeater2(2),repeater3(3)
r1.next() #1
r2.next() #2
r3.next() #3
r1.send(4) #StopIteration
r2.send(4) #2
r2.next() #2
r3.send(4) #4
r3.next() #4
答案 0 :(得分:-2)
变量new
在函数repeater2
(或repeater1
)中没有执行任何操作。该功能可以改写为:
def repeater2(value):
while True:
yield value
同样调用r2.send()
毫无意义,因为它对yield表达式没有任何作用。无论发送给它,它总是返回2,因为它是在生成器初始化期间传递的。
r3
第一次产生3
的初始值,然后在后续调用的send
调用中使用任何值(只要它不是None)。这里实际使用变量new
。
将这些功能重命名为non_repeater
,repeater
和sendable_repeater
可能是有意义的。