標籤:
Python迭代器
迭代器是訪問集合內元素的一種方式。迭代器對象從集合的第一個元素開始訪問,直到所有的元素都被訪問一遍後結束。
迭代器不能回退,只能往前進行迭代。這並不是什麼很大的缺點,因為人們幾乎不需要在迭代途中進行後援動作。
常用的迭代方法有
.next()方法
for..in..方法
迭代器通俗的理解就是遍曆集合內的所有元素
python產生器
這裡先說簡單的使用,然後再說自己建立產生器
range:產生一個list
range(1,5)
結果為:[1,2,3,4]
xrange:產生一個xrange的對象
xrange(5)
結果為:xrange(5)
list(xrange(1,5))
結果為:[1,2,3,4]
list(xrange(1,5,2))
結果為:[1,3]
range與xrange的不同在於range或直接產生整個序列,而xrange則是逐漸返回,迭代時返回。當需要迭代的數目過大,或者有中斷時,使用xrange既能減少記憶體的使用,又能提高效率
python中含有yield的函數就是一個產生器(可能性很大)
yield其實和return差不多,只不過返回的是一個產生器
定義一個產生器
def nub():
nub = range(1,5)
for i in nub:
yield i*i
可以利用type()查看函數nub的類型,在迭代(可使用next())的時候函數才會運行,而且函數每次運行後都會保持上一次啟動並執行狀態,當迭代結束的時候會報錯
Python裝飾器
裝飾器是一個很著名的設計模式,經常被用於有切面需求的情境,較為經典的有插入日誌、效能測試、交易處理等。裝飾器是解決這類問題的絕佳設計,有了裝飾器,我們就可以抽離出大量函數中與函數功能本身無關的雷同代碼並繼續重用。概括的講,裝飾器的作用就是為已經存在的對象添加額外的功能。
摘用一下別人的代碼
#-*- coding: UTF-8 -*-import time def foo(): print ‘in foo()‘ # 定義一個計時器,傳入一個,並返回另一個附加了計時功能的方法def timeit(func): # 定義一個內嵌的封裝函數,給傳入的函數加上計時功能的封裝 def wrapper(): start = time.clock() func() end =time.clock() print ‘used:‘, end - start # 將封裝後的函數返回 return wrapper foo = timeit(foo)foo()
函數foo被函數timeit裝飾
Python產生器、迭代器、裝飾器