裝飾器
在運行原來功能的基礎上,添加一些新的功能蔓姚,如權限的驗證捕虽,日志等
不修改原來的代碼,進行功能的擴展
python裝飾器坡脐,是修改了代碼泄私,python直接運行代碼,不編譯
python裝飾器 用 @函數(shù)名 來表示 被稱為語法糖
下面的代碼中 @ checklogin 就是一個裝飾器
有相對應的函數(shù) checklogin()
def checklogin(func):
def inner():
name= input('name: ')
pwd = input('wd: ')
if name=='qw' and pwd =='123':
func()
else :
print('重新登錄')
return inner
# 程序加載到這就先把save當成參數(shù)傳進checklogin
@checklogin #相當于 save=checklogin(save)
# 執(zhí)行一次checklogin外部函數(shù) 得到返回inner在加載save()
def save():
print('save......')
def delete():
print('delete/./////')
def update():
print('update......')
def select():
print('select........')
save()# 調(diào)用save()相當于調(diào)用checklogin方法里的內(nèi)部inner()方法备闲,
# 先運行inner()方法晌端,在運行自身所代表的方法
update()
多個裝飾器
即一個函數(shù)上面有兩個或以上的裝飾器,運行順序如下:
如果第一個裝飾器判斷不成立恬砂,第二個裝飾器就不再執(zhí)行咧纠,
帶參數(shù)的裝飾器
def ha(num):
def check(func):
def inner1():
if num>2:
age = input('age : ')
if age=='20':
return func()
else:
print('age error ...')
else:
print('?????')
return inner1
return check
# 裝飾器帶參數(shù),需要再寫一層函數(shù)用來傳參觉既,里面的函數(shù)可以根據(jù)參數(shù)做出邏輯判斷
# 在原有的基礎上設置外部變量惧盹,即寫一層函數(shù),并返回原來基礎上的外部函數(shù)名
@ha(4)
def add():
print('+++++++')
add()