dive into python P345
- 函数中出现关键字yield,则它是一种每次生成一个值的特殊函数,调用它会返回一个生成器对象,它可以返回x的连续值
- 调用含有yield关键字的函数,即可创建一个生成器的实例。
- 不断调用生成器对象的next()方法将从你上次离开的位置重新开始,并继续下去,直到又遇到yield语句。
#coding:utf-8
--使用生成器,返回小于n的元素值,myield函数返回一个生成器对象
def myyiled(n):
a,b=0,1
while a<n:
yield a
a,b=a+b,a
--使用生成器,返回前n项的元素值,my函数返回一个生成器对象
def my(n):
a,b=0,1
for i in range(n):
yield a
a,b=a+b,a
if __name__=="__main__":
for i in myyiled(10):
print i, # 0 1 1 2 3 5 8
print
for i in my(10):
print i, # 0 1 1 2 3 5 8 13 21 34
def make_counter(x):
print 'entering make_counter function'
while 1:
yield x
print 'incrementing x'
x+=1
if __name__ == '__main__':
#返回一个生成器对象
counter = make_counter(2)
#调用生成器对象的next方法
print counter.next() # 2
print counter.next() # 3
或输出10项:
def main(n):
while 1:
yield n
n+=1
if __name__ == '__main__':
m = main(0)
for i in range(10):
print m.next(), # 结果:0 1 2 3 4 5 6 7 8 9
# for循环将会创建一个生成器对象并连续调用其next方法获得值并赋予循环变量i,如下:
def main(x):
print 'entering main'
while x:
yield x
x-=1
if __name__ == '__main__':
#调用main函数,返回一个生成器对象
for i in main(10):
print i,