Python 迭代器/生成器
迭代器(iterator)--实现了__next()__方法的对象
可迭代对象(iterable)--实现了__iter()__方法的对象
对一个可迭代对象调用内置函数iter(),可以获得一个迭代器,对一个迭代器使用next()函数,就可以“延迟产生一个值”(lazily produce next value)
所以用for循环去循环迭代迭代器的过程,可以理解为for循环执行了如下的步骤:
- 对对象调用iter()函数,获得一个迭代器
- 使用next()内置函数来调用__next__()方法,获得下一个值
- 当元素用尽时, __next()__将引发StopIteration异常
生成器(generator)--生成器也是一种迭代器,多数生成器和普通的def定义的函数没有区别,只是将返回值时的return换成了yield,这样每次使用yield返回一个值后,函数将冻结在这里,等待重新被唤醒,然后继续从停止的地方继续执行(返回下一个值)。一次计算返回一个结果,而不用一次性地把所有值都计算出来,然后存储在内存之中,这样可以节省大量的内存消耗
生成器会自动实现__iter()__方法和__netx()__方法,但是只能对生成器迭代一次
除了用函数+yield构成一个生成器外,还有一种产生生成器的方法,就是生成器表达式(将列表推导表达式的中括号换成了圆括号):
sum(i*i for i in range(10)) #生成器表达式返回一个生成器对象,而生成器也是迭代器,所以可以用sum()把这个生成器所有元素提取出来并求和
相关推荐
JnX 2020-09-21
joyjoy0 2020-09-18
fanhuasijin 2020-06-21
RocNg 2020-04-18
HongKongPython 2020-03-26
fly00love 2020-03-04
laohyx 2020-03-02
AndroidAmelia 2020-03-01
x青年欢乐多 2020-02-22
晓杰0 2020-02-14
zhglinux 2019-12-29
zhglinux 2019-12-25
fgleeldq 2019-12-22
Jan 2020-08-17
shenxiuwen 2020-08-01
Andrewjdw 2020-07-26
丽丽 2020-06-08
容数据服务集结号 2020-06-08