Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Python迭代器和生成器

迭代器是一个实现迭代器协议的容器对象。它基于next()__iter__()两个方法。class IterDemo(object): def __init__(self, stop):self.start = 0self.stop = stop def next(self):if self.start == self.stop:raise StopIterationself.start += 1return self.start def __iter__(self):return self>>> from iter_demo import IterDemo>>> type(IterDemo(10))<class "iter_demo.IterDemo">>>> print [val for val in IterDemo(10)][1, 2, 3, 4, 5, 6, 7, 8, 9, 10]生成器是一个返回生成迭代器的方法。generator iterator
A function which returns a generator iterator. It looks like a normal function except that it contains yield expressions for producing a series of values usable in a for-loop or that can be retrieved one at a time with the next() function.
一个返回生成迭代器的方法。它看起来像一个正常的方法,但是它包含一个yield表达式使得它能够在for循环中实时生产出一个可以用的值,并且也可以通过next()方法在此次迭代中接收值。
Usually refers to a generator function, but may refer to a generator iterator in some contexts. In cases where the intended meaning isn’t clear, using the full terms avoids ambiguity.
通常是提及的生成器方法,很多情况下就是提及的生成迭代器。在上下文不是很明显的情况下使用完成的表述能避免歧义。>>> def fibonacci():... a, b = 0, 1... while True:... yield b... a, b = b, a + b... >>> fibonacci()<generator object fibonacci at 0xb7352d74>生成器中的方法:
  • next():返回容器的下一个项目
  • send():可以将一个值传入容器中并返回下一个项目
  • throw():允许客户端传入要抛出的类型异常
  • close():抛出一个GeneratorExit异常
协同程序是可以挂起、恢复,并且有多个进入点的函数。列表推导>>> [val for val in range(10)][0, 1, 2, 3, 4, 5, 6, 7, 8, 9]生成器表达式 genexp>>> (val for val in range(10))<generator object <genexpr> at 0xb7352d74>>>> [x for x in (val for val in range(10))][0, 1, 2, 3, 4, 5, 6, 7, 8, 9]itertools模块
islice:窗口迭代器>>> import itertools>>> input_val = "a,b,c,d,e,f,g,h,i,j,k">>> def starting_return(num):... for x in itertools.islice(input_val.split(","), num, None):... yield x...>>> starting_return(2)<generator object starting_return at 0xb71e9054>>>> [val for val in starting_return(2)]["c", "d", "e", "f", "g", "h", "i", "j", "k"]>>> [val for val in starting_return(5)]["f", "g", "h", "i", "j", "k"]>>> [val for val in starting_return(0)]["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"]tee:往返式迭代器......本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-08/134453.htm