免费源码交易网站源码,网站服务器租用平台,旅游网站开发说明,wordpress 股票插件Python迭代器和生成器介绍迭代器迭代器是一个实现了迭代器协议的对象#xff0c;Python中的迭代器协议就是有next方法的对象会前进到下一结果#xff0c;而在一系列结果的末尾是#xff0c;则会引发StopIteration。在for循环中#xff0c;Python将自动调用工厂函数iter()获…Python迭代器和生成器介绍迭代器迭代器是一个实现了迭代器协议的对象Python中的迭代器协议就是有next方法的对象会前进到下一结果而在一系列结果的末尾是则会引发StopIteration。在for循环中Python将自动调用工厂函数iter()获得迭代器自动调用next()获取元素还完成了检查StopIteration异常的工作。常用的几个内建数据结构tuple、list、set、dict都支持迭代器字符串也可以使用迭代操作。你也可以自己实现一个迭代器如上所述只需要在类的__iter__方法中返回一个对象这个对象拥有一个next()方法这个方法能在恰当的时候抛出StopIteration异常即可。但是需要自己实现迭代器的时候不多即使需要使用生成器会更轻松。[python] view plaincopy#!/usr/bin/env python# codingutf-8class test:def __init__(self, input_list):self.list input_listself.i 0def __iter__(self):return selfdef next(self):if self.i len(self.list):self.i 0raise StopIterationself.i 1return self.list[self.i - 1]电脑技术网对《python批量处理图片图片Python迭代器和生成器介绍》总结来说为我们学习编程很实用。使用迭代器一个显而易见的好处就是每次只从对象中读取一条数据不会造成内存的过大开销。例如[python] view plaincopy/* 把文件一次加载到内存中然后逐行打印。当文件很大时这个方法的内存开销就很大了 */for line in open(test.txt).readlines():print line/* 这是最简单也是运行速度最快的写法他并没显式的读取文件而是利用迭代器每次读取下一行 */for line in open(test.txt): #use file iteratorsprint line生成器生成器的编写方法和函数定义类似只是在return的地方改为yield。生成器中可以有多个yield。当生成器遇到一个yield时会暂停运行生成器返回yield后面的值。当再次调用生成器的时候会从刚才暂停的地方继续运行直到下一个yield。生成器自身又构成一个迭代器每次迭代时使用一个yield返回的值。需要注意的是生成器中不需要return语句不需要指定返回值在生成器中已经存在默认的返回语句生成器表达式[python] view plaincopy(i for i in range(5))// 返回迭代器at 0x7ff3e8f0d960列表解析返回list[python] view plaincopy[i for i in range(5)]// 返回list[0, 1, 2, 3, 4]在这里存在一个问题那就是range(5)会返回一个长度为5的数据如果是range(1000)那么就会占用一个1000大小的数组空间如果我们采用生成器在需要的时候产生一个数字那么空间的占用情况就会降低这里我们可以使用xrange()函数来实现。[python] view plaincopyxrange函数说明用法与range完全相同所不同的是生成的不是一个数组而是一个生成器。xrange示例: xrange(5)xrange(5) list(xrange(5))[0, 1, 2, 3, 4] xrange(1,5)xrange(1, 5) list(xrange(1,5))[1, 2, 3, 4] xrange(0,6,2)xrange(0, 6, 2) list(xrange(0,6,2))[0, 2, 4]所以xrange做循环的性能比range好尤其是返回很大的时候尽量用xrange吧除非你是要返回一个列表。