裝飾器:裝飾器為主,閉包和高階函式為輔
阿新 • • 發佈:2021-06-30
裝飾器 = 高階函式 + 閉包
1.什麼是閉包;
# 閉包:就是不執行,等待呼叫狀態 def fun(): print("執行函式") f = fun print(type(f),f) # <class 'function'> <function fun at 0x000002139B203438>
2.什麼是高階函式
#高階函式:只要引數或者返回值是函式那麼就是高階函式 def fun1(): pass def superFun(fun): pass fun = fun1 superFun(fun)
3.1基本裝飾器
# 目的:在不改變原始碼的前提下,新增功能def beforFun(fun): def inner(*args,**kwargs): print(f"業務程式碼{args},{kwargs}") return fun(*args,**kwargs) return inner @beforFun def main(key): print("主函式") main(6)
3.2帶引數的裝飾器
# 目的:在不改變原始碼的前提下,新增功能 def HHHH(key): def beforFun(fun): def inner(*args, **kwargs):print(key) print(f"業務程式碼{args},{kwargs}") return fun(*args, **kwargs) return inner return beforFun @HHHH("hhhhhh") def main(a): print("主函式") main(6)
4.如果要保留裝飾器原函式 的基本屬性
# 在裝飾器中使用,保留原函式的屬性,加上wraps from functools import wraps