python中的迭代器與生成器

迭代器就是重複地做一些事情,可以簡單的理解爲循環,在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


發佈了38 篇原創文章 · 獲贊 7 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章