帶參裝飾器
msg = """
1.QQ
2.wechat
"""
avg = input('驗證方式:')def auth(avg):def wrapper(f):def inner(*args,**kwargs):if avg == 'QQ':user = input('name')pwd = input('password')if user == 'alex' and pwd == '123456':f()else:print('輸入錯誤')elif avg == 'wechat':user = input('name')pwd = input('password')if user == 'lfz' and pwd == '123456':f()else:print('輸入錯誤')return innerreturn wrapper@auth(avg) #func = auth(avg)(func)
def func():print(1)func()
@auth('wechat') :分兩步:
第一步先執行auth('wechat')函數,得到返回值auth2
第二步@與auth2結合,形成裝飾器@auth2 然后在依次執行。
多個裝飾器裝飾一個函數
def wrapper1(func):def inner1(*args,**kwargs):print("這是裝飾器一開始")func(*args,**kwargs)print("這是裝飾器一結束")return inner1def wrapper2(func): def inner2(*args,**kwargs):print("這是裝飾器二開始")func(*args,**kwargs)print("這是裝飾器二結束")return inner2@wrapper1
@wrapper2
def func():print("這是被裝飾的函數")func()
# 結果:
這是裝飾器一開始
這是裝飾器二開始
這是被裝飾的函數
這是裝飾器二結束
這是裝飾器一結束
Python規定多個裝飾器裝飾一個函數的時候先執行離被裝飾的函數最近的裝飾器