generator-Python中yield表达式的结果是什么?

我知道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表达式本身的值。

slacy asked 2019-12-24T18:48:02Z
3个解决方案
61 votes

您还可以将send的值生成到生成器。 如果未发送任何值,则xNone,否则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
jamylak answered 2019-12-24T18:48:22Z
-6 votes

这是一个yield的示例,可以提供来自大缓存的缓冲输出

#Yeild

def a_big_cache():
    mystr= []
    for i in xrange(100):
        mystr.append("{}".format(i))
    return mystr

my_fat_cache = a_big_cache()

def get_in_chunks(next_chunk_size):
    output =[]
    counter = 0
    for element in my_fat_cache:
        counter += 1
        output.append(element)
        if counter == next_chunk_size:
            counter = next_chunk_size
            next_chunk_size+= next_chunk_size
            yield output
            del output[:]

r = get_in_chunks(10)
print next(r)
print next(r)

输出是

['0','1','2','3','4','5','6','7','8','9']

[“ 10”,“ 11”,“ 12”,>“ 13”,“ 14”,“ 15”,“ 16”,“ 17”,“ 18”,“ 19”)

Alex Punnen answered 2019-12-24T18:48:56Z
-8 votes

此代码将产生一些输出

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

t = test()
for i in test():
    print i
San k answered 2019-12-24T18:49:16Z
translate from https://stackoverflow.com:/questions/10695456/what-is-the-result-of-a-yield-expression-in-python