码迷,mamicode.com
首页 > 编程语言 > 详细

Python 迭代器/生成器

时间:2019-12-06 11:36:00      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:生生   next   top   迭代   ret   code   generator   for   不用   

迭代器(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 迭代器/生成器

标签:生生   next   top   迭代   ret   code   generator   for   不用   

原文地址:https://www.cnblogs.com/patrolli/p/11994035.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!