生成器:保存了生成结果的的算法结构,可以推算出后面的元素。
这些数字并没有生成,也没有存到内存中。
生成器对象,只是保存了生成这些数字的算法结构,可以推算出后面的元素。
这样,如果需要取特定的内存,而不是全部加载。
效率提高。
创建方式:1、一个列表生成式的[ ] 改成( )
2、通过函数和yield
列表生成式:
b = (x*2 for x in range(0,11))
<generator object <genexpr> at 0x00000000010DC990>
将算法保存到函数中:
def fib(times):
a = 0
b = 1
i = 0
while i < times:
yield b
a,b = b,a+b
f = fib(10)
next(f)
yield:使程序在yield处停止
next:获取生成器的下一个返回值
send:为算法传递参数,只能赋值给yield开始的代码。目的就是可以动态传递参数,来改变算法
在使用send之前,要先使用next()或者使用send(None)
def getNums(begin,end):
for i in range(begin,end):
temp = yield None
if temp:
#模拟业务逻辑算法1
if i%2==0:
print('....%s'%i)
else:
#模拟业务逻辑算法2
if i%2==1:
print('....%s'%i)
ge = getNums(1,20)
next(ge)
ret = ge.send(True)