裝飾器 = 高階函數 + 閉包
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)
# 在裝飾器中使用,保留原函數的屬性,加上wraps
from functools import wraps