python 多層裝飾器

2022-08-18 07:42:15 字數 2291 閱讀 3011

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...