Python生成器可以看成是一个能够返回一系列生成器对象的函数,它的特别之处在于每次对该函数的调用都会引起一次迭代,返回下一个生成器对象
其返回的生成器对象是一个可迭代对象,即可以用for... in ..
语句来进行遍历
以一个网络上比较流行的斐波那契数列来举例
def fib(max):
a, b = 1, 1
while a < max:
yield a
a, b = b, a+b
ret = fib(30)
print ret
上面一段比较简单的python代码,代码文件的名字为yield.py,该函数的返回对象是一个生成器对象ret
[root@localhost my_code]# python yield.py
<generator object fib at 0x7f0fd2253aa0>
返回的生成器对象具有next()方法,可以通过该方法进行下一轮迭代,获取迭代后的值
def fib(max):
a, b = 1, 1
while a < max:
yield a
a, b = b, a+b
ret = fib(30)
print ret
print ret.next()
print ret.next()
print ret.next()
print ret.next()
[root@localhost my_code]# python yield.py
<generator object fib at 0x7fedc40b2af0>
1
1
2
3