裝飾器 生成器

2021-08-27 00:01:22 字數 1286 閱讀 4946

python生成器、迭代器、裝飾器

最簡單的生成器:

g = (x*x for x in range(10))

for i in g:

print i

函式方法實現稍複雜的生成器:

def fib(max):

n,a,b=0,1,1

while n在迴圈過程中不斷呼叫yield,就會不斷中斷,通常基本不用next()來呼叫,而是直接使用for迴圈。

迭代器是乙個next()方法的物件,而不是通過索引來計數。 

建立迭代器:對乙個物件呼叫iter()函式就可以得到它的迭代器,它的語法如下:

iter(obj) 

iter(func,sentinel)

mytuple=(1,2,3)

i=iter(mytuple)

print i.next()

print i.next()

print i.next()

字典的迭代器會遍歷它的鍵(key),一種比較簡潔的方法如下:

legends = 

for i in legends:

print i

print legends[i]

檔案物件生成的迭代器會自動呼叫readline()方法,一種簡潔的實現方法如下:

myfile = open('a.txt')

for eachline in myfile:

print eachline

基本概念:在函式呼叫前後自動列印日誌,又不改變原函式,在**執行期間動態增加功能的方式稱之為「裝飾器」。

裝飾器的語法已@開頭,接下來是裝飾器函式的名字和可選的引數,緊跟著裝飾器宣告的是被修飾的函式和裝飾函式的可選引數。

decorator(dec_opt_args) 

def func2bdecorated(func_opt_args):

比較常用的地方: 

1、引入日誌 

2、增加計時邏輯來檢測效能 

3、給函式加入事務的能力

def log(func):

print 'call %s():' % func.__name__

return func(*args, **kw)

@log

def now():

裝飾器 生成器

裝飾器主要用於程式功能的一些擴充套件。由於在python中,函式名 不帶括號 也是一種變數名,可以像賦值一樣給另外乙個變數。這就導致了裝飾器這種玩法。其實函式名就是儲存著函式的位址,因此,可以把這個位址賦值給另外乙個變數,與c語言中的指標基本一樣,同時與python列表的引用也是相像的。不附加新引數...

PHLK 生成器 裝飾器

def printf nums for num in nums print num is d num yield num defadder nums for num in nums print adding d num if num 2 0 yield num 1else yield num 2nu...

裝飾器,生成器,迭代器

裝飾器 import time def show time func def inner x start time time.time func x end time time.time print end time start time return inner show time def add...