1

我对生成器有什么误解,我没有得到我期望的输出?我正在尝试创建一个简单的函数,该函数将输出 i .send() 它的任何数据,如果没有发送任何信息,则返回“无”。

import pudb
#pudb.set_trace()
def gen():
        i = 0
        while True:
                val = (yield i)
                i = val
                if val is not None:
                        yield val
                else:
                        yield 'none'

test = gen()
next(test)
print test.send('this')
print test.send('that')
print test.next()
print test.send('now')

预期输出:

'this'
'that'
'none'
'now'

实际输出:

'this'
'this'
'none'
'none'
4

1 回答 1

0

您产生每个值两次。一旦来到这里:

val = (yield i)

一次在这里:

yield val

您应该只产生一次每个值,并捕获用户的输入,如下所示:

def parrot():
    val = None
    while True:
        val = yield val

如果您真的想在用户调用时产生字符串'none'而不是实际对象,您可以这样做,但这可能不是一个好主意:Nonenext

def parrot():
    val = None
    while True:
        val = yield ('none' if val is None else val)
于 2013-08-04T04:36:03.427 回答