生成器(generator):一个特殊的迭代器
特点:1.惰性计算数据,节省内存
2.能够记录状态,并通过next(生成器)函数【或者生成器.__next__()】,访问下一个状态
3.具备可迭代特性
创建方式:
1 将[]→() l = (i for i in range(1, 100) if 1 % 2 == 0)
2 生成器函数
例:
def test(): print("xxx") yield 1 print("a") yield 2 print("c") yield 3 print("d") yield 4 g = test() #不执行(生成器的生成) next(g) #或者g.__next__()
yield 阻断当前函数执行,当使用next(g)或g.__next()时,都会让函数继续执行,然后当执行到下一个yield时,又会暂停。最后没有yield时,就会报错
注意:
执行函数时(g= test())不会真正执行函数,而是生成生成器
send()方法-----------比next()多一个向之前挂起的yield传值的过程。(第一个yield前没有yield,则第一个send需要传入None)
g.send("ooo")
g.close()---------------------关闭生成器
关闭之后不能再用next(g)访问
return
碰到return就会抛出异常,并将return后面的值一起抛出
如:
return 10
StopIteration 10
注意:
生成器和迭代器只能迭代一次,如需再次遍历,则需要再次创建。