四.Python叠代器生成器和裝飾器
阿新 • • 發佈:2018-02-17
div 惰性 python 附加 next lee 裝飾器 生成 star
叠代器
叠代是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+1 f=fib(10) for i in f: print(i)
裝飾器
裝飾器: 本質是函數, 用於裝飾其他函數, 附加一些本身所沒有的功能
原則:1.不能修改被裝飾的函數的源代碼
2.不能修改被裝飾的函數的調用方式
import time def bar(): time.sleep(3) print(‘in the bar‘) deftest1(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叠代器生成器和裝飾器