生成器(generator):在Python中,这种一边循环一边计算的机制,称为生成器
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。
而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了
创建生成器只需要将类别生成式的[]改成()
#生成器 g=(x*x for x in range(10)) #<generator object <genexpr> at 0x000002670CC45E48> #如果要一个个打印出来,可以通过next()函数得到下一个返回值 next(g) #0 next(g) #1 next(g) #4 #每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误
当然生成器也可以使用for循环迭代
#创建一个生成器,并输出每一个值 g=(x*x for x in range(1,10)) for i in g: print(i)
斐波拉契数列用列表生成式写不出来,但是,用函数把它打印出来却很容易:
def fib(max): n,a,b=0,0,1 while n<max: print(b) a,b=b,a+b n=n+1 return ‘done‘ fib(10)
函数中使用生成器,如果函数中含有yield
关键字,那么函数就是一个generator:
函数是顺序执行,遇到return
语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()
的时候执行,遇到yield
语句返回,再次执行时从上次返回的yield
语句处继续执行
def fib(max): n,a,b=0,0,1 while n<max: yield b a,b=b,a+b n=n+1 return ‘done‘ fib(10) #<generator object fib at 0x104feaaa0>
试着用生成器输出杨辉三角
原文:https://www.cnblogs.com/cgmcoding/p/13295038.html