迭代器就是重複地做一些事情,可以簡單的理解爲循環,在python中實現了__iter__方法的對象是可迭代的,實現了next()方法的對象是迭代器,這樣說起來有點拗口,實際上要想讓一個迭代器工作,至少要實現__iter__方法和next方法。很多時候使用迭代器完成的工作使用列表也可以完成,但是如果有很多值列表就會佔用太多的內存,而且使用迭代器也讓我們的程序更加通用、優雅、pythonic。下邊是一個例子,從裏邊你會感受到不用列表而用迭代器的原因。
#!/usr/bin/env python
#coding=utf-8
class Fib:
def __init__(self):
self.a,self.b = 0,1
def next(self):
self.a,self.b = self.b,self.a+self.b
return self.a
def __iter__(self):
return self
fibs = Fib()
for f in fibs:
if f < 10000:
print f
else:
break
迭代器是一個對象,而生成器是一個函數,迭代器和生成器是python中兩個非常強大的特性,編寫程序時你可以不使用生成器達到同樣的效果,但是生成器讓你的程序更加pythonic。創建生成器非常簡單,只要在函數中加入yield語句即可。函數中每次使用yield產生一個值,函數就返回該值,然後停止執行,等待被激活,被激活後繼續在原來的位置執行。下邊的例子實現了同樣的功能:
#!/usr/bin/env python
#coding=utf-8
def fib():
a,b = 0,1
while 1:
a,b = b,a+b
yield a
for f in fib():
if f < 10000:
print f
else:
break