1. 程式人生 > >四.Python叠代器生成器和裝飾器

四.Python叠代器生成器和裝飾器

div 惰性 python 附加 next lee 裝飾器 生成 star

叠代器

叠代是Python最強大的功能之一,是訪問集合元素的一種方式。

叠代器是一個可以記住遍歷的位置的對象。

叠代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。叠代器只能往前不會後退。

凡是可作用於for循環的對象都是Iterable類型;

凡是可作用於next()函數的對象都是Iterator類型,它們表示一個惰性計算的序列;

集合數據類型如listdictstr等是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)

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叠代器生成器和裝飾器