生成器:
在python中,一边循环一边计算的机制,称为生成器:generator。
生成器不会把所有结果全部保存在内存中,而是保存生成的计算规则,每次迭代的时候返回一个计算出来的值,直到遇到Stoplteration异常结束。
创建生成器:
- 生成器表达式:
通过和列表生成式相同的语法来生成,唯一不同只是把列表生成式的[]
换成()
。例:
#生成列表
L=[x*x for x in range(10)]
#生成生成式
g=(x*x for x in range(10))
- 生成器函数:
若函数存在关键字yeild,那么该函数就是一个generator函数。例:
#生成斐波那契数列的生成器
def fib():
a,b=0,1
while True:
yield b
temp=b
b=a+b
a=temp
yield和return与generator之间的关系:
-
在一个generator中若没有return,则默认执行到函数完毕时候返回StopIteration
-
函数执行遇到return,直接抛出Stoplteration且return返回值就是Stoplteration的错误信息。
生成器的操作:
-
next()
前面我们说了,生成器保存的是计算出下一个生成值的算法,那么怎么获取生成的下一个值呢,用next()
函数来获取生成器的下一个值,当计算出最后一个元素后,若继续调用,则会报StopIteration的错误。
-
for
因为生成器也是一个可迭代对象Interable。
迭代器
可以直接作用于
for
循环的对象统称为可迭代对象Iterable
可以被next()
调用并不断返回下一个值的对象称为迭代器Iterator
迭代器就是可迭代对象,可迭代对象不一定是迭代器,比如list、dict、set
是可迭代对象,但不是迭代器。但是list...
等可迭代对象可以通过itor()
函数转化为迭代器