【问题标题】:About Python Generator关于 Python 生成器
【发布时间】:2017-08-03 01:20:31
【问题描述】:

如何理解函数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

【问题讨论】:

  • new = field value 不是有效的 python。这段代码似乎缺少了一堆。
  • 你是不是不小心把fieldyield搞混了?
  • @KlausD。哦,我很抱歉,
  • @pvg 已添加。谢谢

标签: python generator


【解决方案1】:

变量new 在函数repeater2(或repeater1)中没有任何作用。函数可以改写为:

def repeater2(value):
    while True:
        yield value

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

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

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

【讨论】:

  • @Alex.. 在没有说明原因的情况下投票否决主要是由路过一无所知的人完成的。不要让这影响你。
猜你喜欢
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 2013-10-02
相关资源
最近更新 更多