Python中yieldexpression式的结果是什么?
我知道yield会将函数转换为生成器,但yieldexpression式本身的返回值是多less? 例如:
def whizbang(): for i in range(10): x = yield i
这个函数执行的variablesx
的值是什么?
我已经阅读了Python文档: http : //docs.python.org/reference/simple_stmts.html#grammar-token-yield_stmt ,似乎没有提到yieldexpression式本身的价值。
您也可以send
值send
给生成器。 如果没有值被发送,则x
为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
发生这种情况是因为产量会在运行中产生更多信息,请查看以下网站https://freepythontips.wordpress.com/2013/09/29/the-python-yield-keyword-explained/
这段代码会产生一些输出
def test(): for i in range(10): x = yield i t = test() for i in test(): print i
这里给出一个例子,说明缓冲输出来自一个很大的输出
#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']