我知道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表达式本身的价值。
答案 0 :(得分:59)
您还可以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
答案 1 :(得分:-6)
此代码将产生一些输出
def test():
for i in range(10):
x = yield i
t = test()
for i in test():
print i
答案 2 :(得分:-6)
这是一个从一个大的cahce
给出缓冲输出的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',& #39; 5',' 6',' 7',' 8',' 9']
[' 10',' 11',' 12',> ' 13',' 14',' 15',' 16',' 17',' 18& #39;,' 19']