天天看點

裝飾器:裝飾器為主,閉包和高階函數為輔

裝飾器   =  高階函數 +  閉包

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