63

我知道yield把一个函数变成了一个生成器,但是yield表达式本身的返回值是多少呢?例如:

def whizbang(): 
    for i in range(10): 
        x = yield i

x这个函数执行时变量的值是多少?

我已经阅读了 Python 文档:http ://docs.python.org/reference/simple_stmts.html#grammar-token-yield_stmt似乎没有提到 yield 表达式本身的值。

4

1 回答 1

73

您还可以send对生成器进行赋值。如果没有发送值,则xis None,否则x采用发送的值。这是一些信息:http ://docs.python.org/whatsnew/2.5.html#pep-342-new-generator-features

>>> def whizbang():
        for i in range(10):
            x = yield i
            print 'got sent:', x


>>> i = whizbang()
>>> next(i)
0
>>> next(i)
got sent: None
1
>>> i.send("hi")
got sent: hi
2
于 2012-05-22T03:49:42.220 回答