在函式前後做點事情,比如鑑權、記錄日誌
將執行的函式傳入包裝函式,在包裝函式內部使用閉包構造包含傳入函式的新函式,返回新函式,執行的函式指向新函式
函式程式設計的開閉原則:對新增開放,對修改關閉
def wrap1(fun):def infun(*listargs,**dictargs):
token = dictargs.pop('token')#獲取token,並刪除,等價於先取值,再del dictargs['token']
is_login = false
if not is_login:
return "非法使用者"
print 1
temp = fun(*listargs,**dictargs)
print 2
return temp
return infun
def wrap2(fun):
def infun(*listargs,**dictargs):#動態引數獲取引數
print 3
temp = fun(*listargs,**dictargs)#fun指向傳入的原f1的函式體
print 4
return temp
return infun
@wrap1
@wrap2#先包裝wrap2,再包裝wrap1,等價於f1 = wrap(f1);f1指向新函式
def f1(arg):
print "f1%s" % arg
return ['1.1.1.1']
print f1('haha')
裝飾器,生成器,迭代器
裝飾器 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...
迭代器 生成器 裝飾器
1.迭代器 1 定義 同時滿足 iter 方法和next 方法的物件就是迭代器。3 型別 可迭代物件通過iter 轉為迭代器 生成器是一種特殊的迭代器。2.生成器 1 定義 生成器是迭代器的一種,包括含有yield關鍵字函式和生成器表示式。2 用法 所有函式呼叫的引數都是第一次呼叫時保留的,而不是新...
生成器 迭代器 裝飾器
迭代器表面上看是乙個資料流物件或者容器,當使用其中的資料時,每次從資料流中取出乙個資料,直到資料被取完,而且資料不會被重複使用。從 的角度來看,迭代器是實現了迭代器協議方法的物件和類。迭代器協議方法主要是兩個 iter 該方法返回物件本身,它是for語句使用迭代器的要求 next 方法用於返回容器中...