標籤:迭代 ext lis 元素 執行 資訊 iterable yield 調用
迭代器
迭代是Python最強大的功能之一,是訪問集合元素的一種方式。
迭代器是一個可以記住遍曆的位置的對象。
迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
凡是可作用於for迴圈的對象都是Iterable類型;
凡是可作用於next()函數的對象都是Iterator類型,它們表示一個惰性計算的序列;
集合資料類型如list、dict、str等是Iterable但不是Iterator,不過可以通過iter()函數獲得一個Iterator對象。
Python的for迴圈本質上就是通過不斷調用next()函數實現的。
list=[1,2,3,4]>>> it = iter(list) # 建立迭代器對象>>> print (next(it)) # 輸出迭代器的下一個元素1>>> print (next(it))2>>>
產生器
在 Python 中,使用了 yield 的函數被稱為產生器(generator)。
跟普通函數不同的是,產生器是一個返回迭代器的函數,只能用於迭代操作,更簡單點理解產生器就是一個迭代器。
在調用產生器啟動並執行過程中,每次遇到 yield 時函數會暫停並儲存當前所有的運行資訊,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續運行。
調用一個產生器函數,返回的是一個迭代器對象。
def fib(max): n=0 a=0 b=1 while max>n: yield b a,b=b,a+b n=n+1f=fib(10)for i in f: print(i)
裝飾器
裝飾器: 本質是函數, 用於裝飾其他函數, 附加一些本身所沒有的功能
原則:1.不能修改被裝飾的函數的原始碼
2.不能修改被裝飾的函數的調用方式
import timedef bar(): time.sleep(3) print(‘in the bar‘)def test1(func): start_time=time.time() func() #run bar stop_time=time.time() print("the func run time is %s" %(stop_time-start_time))test1(bar)bar()
四.Python迭代器產生器和裝飾器