python学习笔记-生成器和迭代器

生成器:

在python中,一边循环一边计算的机制,称为生成器:generator
生成器不会把所有结果全部保存在内存中,而是保存生成的计算规则,每次迭代的时候返回一个计算出来的值,直到遇到Stoplteration异常结束。

创建生成器:

  • 生成器表达式:
    通过和列表生成式相同的语法来生成,唯一不同只是把列表生成式的[]换成()。例:
#生成列表
L=[x*x for x in range(10)]
#生成生成式
g=(x*x for x in range(10))
python学习笔记-生成器和迭代器_第1张图片
  • 生成器函数:
    若函数存在关键字yeild,那么该函数就是一个generator函数。例:
#生成斐波那契数列的生成器
def fib():
    a,b=0,1
    while True:
        yield b
        temp=b
        b=a+b
        a=temp
python学习笔记-生成器和迭代器_第2张图片

yield和return与generator之间的关系:

  • 在一个generator中若没有return,则默认执行到函数完毕时候返回StopIteration
    python学习笔记-生成器和迭代器_第3张图片
  • 函数执行遇到return,直接抛出Stoplteration且return返回值就是Stoplteration的错误信息。
    python学习笔记-生成器和迭代器_第4张图片

生成器的操作:

  • next()
    前面我们说了,生成器保存的是计算出下一个生成值的算法,那么怎么获取生成的下一个值呢,用next()函数来获取生成器的下一个值,当计算出最后一个元素后,若继续调用,则会报StopIteration的错误。

    python学习笔记-生成器和迭代器_第5张图片

  • for
    因为生成器也是一个可迭代对象Interable

    python学习笔记-生成器和迭代器_第6张图片

迭代器

可以直接作用于for循环的对象统称为可迭代对象Iterable
可以被next()调用并不断返回下一个值的对象称为迭代器Iterator

迭代器就是可迭代对象,可迭代对象不一定是迭代器,比如list、dict、set是可迭代对象,但不是迭代器。但是list...等可迭代对象可以通过itor()函数转化为迭代器

你可能感兴趣的:(python学习笔记-生成器和迭代器)