一、生成器
一遍循环一遍计算的机制,称为生成器
二、生成器的特点:
1、节约内存
2、迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新创建的
三、创建方法
1、把列表生成式的[]改为()
#列表 L = [x*2 for x in range(5)] print L #生成器 G = (x*2 for x in range(5)) print G
以上代码运行结果
[0, 2, 4, 6, 8]
<generator object <genexpr> at 0x0000000002E40AF8>
2、yield 生成
yield 自动终止返回结果。
循环从终止的地方向下进行
def creatNum(): print ("----start----") i = 0 while i < 5: temp = yield i print(temp) i+= 1 #创建一个生成器对象 a = creatNum() #让对象开始执行,第一次从头开始执行,如果之前执行过,就从上一次停止的地方开始执行 next(a)
以上代码运行结果
----start---- >>> next(a) None 1 >>> next(a) None 2 >>> a.send("SQYY") SQYY 3 >>> next(a) None 4 >>>
四、补充:
send()
执行到yield时,gen函数作用暂时保存send发送过来的值
c.next()等价c.send(None)