在列表生成式中一旦创建一个列表那么将会创建所有元素,往往我们只需要几个,这极大浪费了内存空间。生成器就是为解决这种情况诞生的。
它是一边计算一边生成元素的,一旦你不再i需要,它就不会计算后续元素。
创建方式:
列表生成式中把列表的中括号改为圆括号:
-
L=[x*x for x in range(1,11)] #列表
-
L=(x*x for x in range(1,11)) #生成器
函数中包含yield关键字:
当函数中包含yield关键字时就不再是普通的函数,而是generator。
-
def fib(max):
-
n,a,b=0,0,1
-
while n<max:
-
yield b #注意此处,利用此生成器输出时yield等同于print
-
a,b=b,a+b
-
n=n+1
-
return 'done'
调用方式:
通过next()函数调用:
-
next(L) #L是利用列表生成式创建的generator
-
-
a=fib(6)
-
next(a) #函数方式的generator
当generator是利用函数创建时调用一次next()函数执行到有yield的一行就结束,不会继续往下执行,再次调用时它会接着往下执行,而不是从头执行
通过for循环调用:
-
for n in generator: #此处的generator处可以用任何生成器代替
-
print n
还需补充如何获取被创建为生成器的函数的返回值
生成器方法:
在python2.5及以后的的版本中生成器共有三种方法,send(),throw(),close()。
阅读(423) | 评论(0) | 转发(0) |