25、多層裝飾器:
1、原理:執行順序從上往下,#2和#3組成乙個函式假設為nf1,#1和nf1組成乙個函式nnf1
f1成為ck_ty_of_us的inner函式即nf1。nf1成為check_login的inner函式即nnf1。詳細參照alex的多層裝飾器講解。。
#1 @check_login
#2 @ck_ty_of_us
#3 def f1():
pass
2、應用多層裝飾器實現使用者管理程式如下:
user_login = {}
def check_login(func):
def inner(*args,**kwargs):
if user_login.get('is_login'):
ret = func(*args,**kwargs)
return ret
else:
print('請先登入')
return inner
def ck_ty_of_us(func):
def inner(*args,**kwargs):
if user_login['user_type'] == '2':
ret = func(*args,**kwargs)
return ret
else:
print('你沒有許可權')
return inner
def register(user,pwd):
with open('xinxi','r+') as f1:
f1.seek(0,2)
f1.write(user + '|' + pwd +'|1\n')
def login(user,pwd):
with open('xinxi','r+') as f5:
for line in f5:
if line.strip().startswith(user):
l2 = line.strip().split('|')
user_login['is_login'] = true
user_login['user_type'] = l2[2]
print('歡迎%s登陸' %user)
@check_login
@ck_ty_of_us#應用的是多層裝飾器的功能。
def cpwd(user,pwd):
with open('xinxi','r+') as f2,open('xinxi2','w') as f3:
for line in f2:
if line.strip().startswith(user):
l1 = line.split('|')
l1[1] = pwd
line1 = '|'.join(l1)
f3.write(line1)
else:
f3.write(line)
@check_login
def viewmes(user):
#普通使用者讀取自己資訊
list1 =
with open('xinxi','r+') as f4:
for line in f4:
if line.strip().startswith(user):
print(list1)
def main():
while true:
chose = input('1.註冊 2.登陸 3.修改密碼 4.檢視自己的資訊:')
if chose == '1':
username = input('請輸入使用者名稱:')
password = input('請輸入密碼:')
register(username,password)
if chose == '2':
username = input('請輸入使用者名稱:')
password = input('請輸入密碼:')
login(username,password)
if chose == '3':
username = input('請輸入使用者名稱:')
password = input('請輸入要修改的密碼:')
cpwd(username,password)
if chose == '4':
username = input('請輸入使用者名稱:')
viewmes(username)
main()
Python 多層裝飾器
python 的裝飾器能夠在不破壞函式原本結構的基礎上,對函式的功能進行補充。當我們需要對乙個函式補充不同的功能,可能需要用到多層的裝飾器。在我的使用過程中,遇到了兩種裝飾器層疊的情況,這裡把這兩種情況寫下來,作為踩坑記錄。def a func defdecorated c fune defdeco...
多層裝飾器例子
def outter1 func1 print 載入了outter1 print res1 func1 args,kwargs return res1 return defoutter2 func2 print 載入了outter2 print res2 func2 return res2 retu...
多層裝飾器的執行問題
首先講到多層裝飾器的時候老師都會這麼說 多個裝飾器的呼叫順序是自下往上,但是執行時的執行順序是自上往下!但是呢,我們並不知道為什麼是這樣的,於是抱著求真務實,積極努力,奮發圖強的精神。我反覆試了 設定斷點,看看內部到底發生了啥 先把測試用的 放上來 def decorator a func prin...