1. 程式人生 > >Python 裝飾器,帶有引數的裝飾器

Python 裝飾器,帶有引數的裝飾器

 

demo.py(裝飾器,帶引數的裝飾器):

def set_level(level_num):
    def set_func(func):
        def call_func(*args, **kwargs):
            if level_num == 1:
                print("----許可權級別1,驗證----")
            elif level_num == 2:
                print("----許可權級別2,驗證----")
            return func()
        return call_func
    return set_func  # 返回裝飾器的引用

# 帶有引數的裝飾器裝飾過程分為2步:
# 1. 呼叫set_level函式,把1當做實參
# 2. set_level返回一個裝飾器的引用,即set_func
# 3. 用返回的set_func對test1函式進行裝飾

@set_level(1)
# 呼叫set_level方法(可以傳參,不同的引數裝飾不同的功能),用set_level方法的返回值當做裝飾器進行裝飾。
def test1():
    print("-----test1---")
    return "ok"

@set_level(2)
def test2():
    print("-----test2---")
    return "ok"


test1()
test2()