1. 程式人生 > >Python基礎12-裝飾器

Python基礎12-裝飾器

閉包 swd lse ext rap urn 狀態 justin 重新登錄

裝飾器:本質就是函數,功能是為其他函數添加附加功能 裝飾器=高階函數+函數嵌套+閉包

原則:1.不修改被修飾函數的源代碼

2.不修改被修飾函數的調用方式

#用修飾器模擬驗證功能
user_list=[
    {user:alex,passwd:123},
    {user:justin,passwd:123},
    {user:balley,passwd:123}
]
user_tag = {username:None,login:False}

def login(func):
    def wrapper(*args,**kwargs):
        
if user_tag[username] and user_tag[login]: res = func(*args,**kwargs) return res name = input(請輸入用戶名:).strip() passwd = input(請輸入您的密碼:).strip() for name_dic in user_list: if name_dic[user]==name and name_dic[passwd]==passwd: #記住登錄狀態,調用其他函數時不用再重新登錄
user_tag[username] = name_dic[user] user_tag[login] = True res = func(*args, **kwargs) return res else: print(用戶名或賬號密碼錯誤) return wrapper @login #相當於home = login(home) def home(name,x=!!!): print(
親愛的%s:歡迎回家%s %(name,x)) @login def buycar(): print(這是你的購物車) @login def order(): print(這是你的訂單) home(alex,x=!) buycar() 輸出結果: 請輸入用戶名:alex 請輸入您的密碼:123 親愛的alex:歡迎回家! 這是你的購物車

Python基礎12-裝飾器