建一个网站需要什么手续,大连建网站策划,微信公司,网站流量被黑在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(Generator)。一、迭代器(iterator)在Python中#xff0c;for循环可以用于Python中的任何类型#xff0c;包括列表、元祖等等#xff0c;实际上#xff0c;for循环可用于任何“可迭代对象”#xff0c;这其… 在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(Generator)。一、迭代器(iterator)在Python中for循环可以用于Python中的任何类型包括列表、元祖等等实际上for循环可用于任何“可迭代对象”这其实就是迭代器迭代器是一个实现了迭代器协议的对象Python中的迭代器协议就是有next方法的对象会前进到下一结果而在一系列结果的末尾是则会引发 StopIteration。任何这类的对象在Python中都可以用for循环或其他遍历工具迭代迭代工具内部会在每次迭代时调用next方法并且 捕捉StopIteration异常来确定何时离开。使用迭代器一个显而易见的好处就是每次只从对象中读取一条数据不会造成内存的过大开销。比如要逐行读取一个文件的内容利用readlines()方法我们可以这么写for line in open(test.txt).readlines():print line这样虽然可以工作但不是最好的方法。因为他实际上是把文件一次加载到内存中然后逐行打印。当文件很大时这个方法的内存开销就很大了。利用file的迭代器我们可以这样写for line in open(test.txt): #use file iteratorsprint line这是最简单也是运行速度最快的写法他并没显式的读取文件而是利用迭代器每次读取下一行。二、生成器(Generator)生成器函数在Python中与迭代器协议的概念联系在一起。简而言之包含yield语句的函数会被特地编译成生成器。当函数被调用时他们返回一个生成器对象这个对象支持迭代器接口。函数也许会有个return语句但它的作用是用来yield产生值的。不像一般的函数会生成值后退出生成器函数在生成值后会自动挂起并暂停他们的执行和状态他的本地变量将保存状态信息这些信息在函数恢复时将再度有效 def g(n):
... for i in range(n):
... yield i **2
...for i in g(5):
... print i,:,
...
0 : 1 : 4 : 9 : 16 :要了解他的运行原理我们来用next方法看看 t g(5)t.next()
0t.next()
1t.next()
4t.next()
9t.next()
16t.next()
Traceback (most recent call last):File stdin, line 1, in module
StopIteration在运行完5次next之后生成器抛出了一个StopIteration异常迭代终止。再来看一个yield的例子用生成器生成一个Fibonacci数列def fab(max):a,b 0,1while a max:yield aa, b b, ab for i in fab(20):
... print i,,,
...
0 , 1 , 1 , 2 , 3 , 5 , 8 , 13 ,看到这里应该就能理解生成器那个很抽象的概念了吧~~ 转载于:https://blog.51cto.com/tianxingzhe/1722897