Python 迭代器/生成器

Posted patrolli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 迭代器/生成器相关的知识,希望对你有一定的参考价值。

迭代器(iterator)--实现了__next()__方法的对象

可迭代对象(iterable)--实现了__iter()__方法的对象

对一个可迭代对象调用内置函数iter(),可以获得一个迭代器,对一个迭代器使用next()函数,就可以“延迟产生一个值”(lazily produce next value)

所以用for循环去循环迭代迭代器的过程,可以理解为for循环执行了如下的步骤:

  1. 对对象调用iter()函数,获得一个迭代器
  2. 使用next()内置函数来调用__next__()方法,获得下一个值
  3. 当元素用尽时, __next()__将引发StopIteration异常

生成器(generator)--生成器也是一种迭代器,多数生成器和普通的def定义的函数没有区别,只是将返回值时的return换成了yield,这样每次使用yield返回一个值后,函数将冻结在这里,等待重新被唤醒,然后继续从停止的地方继续执行(返回下一个值)。一次计算返回一个结果,而不用一次性地把所有值都计算出来,然后存储在内存之中,这样可以节省大量的内存消耗

生成器会自动实现__iter()__方法和__netx()__方法,但是只能对生成器迭代一次

除了用函数+yield构成一个生成器外,还有一种产生生成器的方法,就是生成器表达式(将列表推导表达式的中括号换成了圆括号):

sum(i*i for i in range(10)) #生成器表达式返回一个生成器对象,而生成器也是迭代器,所以可以用sum()把这个生成器所有元素提取出来并求和

以上是关于Python 迭代器/生成器的主要内容,如果未能解决你的问题,请参考以下文章

python:可迭代对象,迭代器,生成器函数,生成器的解析举例代码说明

Python概念之装饰器迭代器生成器

python函数:迭代器和生成器

Python3 迭代器与生成器

Python的高级特性(切片,迭代,生成器,迭代器)

Python---迭代器,生成器,列表推导式