关于Python Generator

时间:2017-03-13 04:27:42

标签: python generator

如何理解功能repeater2repeater3

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

1 个答案:

答案 0 :(得分:-2)

变量new在函数repeater2(或repeater1)中没有执行任何操作。该功能可以改写为:

def repeater2(value):
    while True:
        yield value

同样调用r2.send()毫无意义,因为它对yield表达式没有任何作用。无论发送给它,它总是返回2,因为它是在生成器初始化期间传递的。

r3第一次产生3的初始值,然后在后续调用的send调用中使用任何值(只要它不是None)。这里实际使用变量new

将这些功能重命名为non_repeaterrepeatersendable_repeater可能是有意义的。