Python隨心記--函式閉包為函式加上認證功能
阿新 • • 發佈:2018-12-16
函式閉包為函式加上認證功能
def auth_func(func): def wrapper(*args,**kwargs): user_name = input('使用者名稱:').strip() user_pass = input('密 碼:').strip() if user_name == 'achun' and user_pass == 77770000: ret = func(*args,**kwargs) return ret else:print('賬戶或密碼錯誤!') return wrapper @auth_func def index(): print('歡迎來到京東') @auth_func def home(name): print('歡迎%s回家' %name) @auth_func def shopping_car(name,names,namess): print('購物車的東西【%s,%s,%s】' %(name,names,namess)) index() home('achun') shopping_car('奶茶','籃球','褲子')
函式閉包模擬session 目前知識:全域性變數
user_list = [ {'user':'alex','pass':'123456'}, #這裡注意資料型別 {'user':'async','pass':'123456'}, {'user':'lauencess','pass':'123456'} ] current_dic= {'user':None,'login':False} def auth_func(func): def wrapper(*args,**kwargs): if current_dic['user'] and current_dic['login']: ret= func(*args, **kwargs) return ret username = input('使用者名稱:').strip() userpass = input('密 碼:').strip() for user_dic in user_list: if username == user_dic['user'] and userpass == user_dic['pass']: ret = func(*args,**kwargs) current_dic['user'] = username current_dic['login'] = True return ret else:#若整個迴圈都未找到對應的賬戶和密碼將會退出 print('賬戶或密碼錯誤!') return wrapper @auth_func def index(): print('歡迎來到京東') @auth_func def home(name): print('歡迎%s回家' %name) @auth_func def shopping_car(name,names,namess): print('購物車的東西【%s,%s,%s】' %(name,names,namess)) index() home('achun') shopping_car('奶茶','籃球','褲子')
函式閉包帶引數裝飾器 新增應用場景
user_list = [ {'user':'alex','pass':'123456'}, #這裡注意資料型別 {'user':'async','pass':'123456'}, {'user':'lauencess','pass':'123456'} ] current_dic= {'user':None,'login':False} def auth( auth_type = 'filedb'): #可以傳一個場景 def auth_func(func): def wrapper(*args, **kwargs): #print('場景是%s' %auth_type) if auth_type == 'filedb': if current_dic['user'] and current_dic['login']: ret = func(*args, **kwargs) return ret username = input('使用者名稱:').strip() userpass = input('密 碼:').strip() for user_dic in user_list: if username == user_dic['user'] and userpass == user_dic['pass']: ret = func(*args, **kwargs) current_dic['user'] = username current_dic['login'] = True return ret else: # 若整個迴圈都未找到對應的賬戶和密碼將會退出 print('賬戶或密碼錯誤!') elif auth_type == 'Mongodb': print('這裡執行另外的操作') else: print('這裡執行另外的操作') return wrapper return auth_func @auth(auth_type = 'filedb') #auth_func = auth(auth_type = 'filedb') def index(): print('歡迎來到京東') @auth(auth_type = 'Mongodb') #auth_func = auth(auth_type = 'filedb') def home(name): print('歡迎%s回家' %name) @auth(auth_type = 'Redis') #auth_func = auth(auth_type = 'filedb') def shopping_car(name,names,namess): print('購物車的東西【%s,%s,%s】' %(name,names,namess)) @auth(auth_type = 'Memcached') #auth_func = auth(auth_type = 'filedb') def detailed_list(name,names,namess): print('購物車的東西【%s,%s,%s】' %(name,names,namess)) index() home('achun') shopping_car('奶茶','籃球','褲子')