函数闭包带参数装饰器
Posted zhangsenzhen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数闭包带参数装饰器相关的知识,希望对你有一定的参考价值。
import time users_dic = [{‘name‘:‘zsz‘,‘passwd‘:‘123‘}, {‘name‘:‘alex‘,‘passwd‘:‘123‘}, {‘name‘:‘lhf‘,‘passwd‘:‘123‘}] current_dic = {"username":None,"Login":False} def auth(auth_type=‘filedb‘): def auth_func(func): def wrapper(*args,**kwargs): print("认证方式是:",auth_type) if auth_type == ‘filedb‘: if current_dic["username"] and current_dic["Login"]: res = func(*args,**kwargs) return res username = input("用户名:").strip() passwd = input("密码:").strip() for user_dic in users_dic: if username == user_dic[‘name‘] and passwd == user_dic[‘passwd‘]: current_dic["username"] = username current_dic["Login"] = True res = func(*args, **kwargs) return res else: print("用户名或者密码错误") elif auth_type == ‘ldap‘: start_time = time.time() res = func(*args,**kwargs) stop_time = time.time() print("函数运行时间为%s秒" %(stop_time-start_time)) return res return wrapper return auth_func @auth(auth_type=‘filedb‘) #home = auth(auth_type=‘field‘) --> home = auth_func(home) --> home = wrapper def home(name): print("欢迎%s回家" %name) @auth(auth_type=‘ldap‘) def shopping(): time.sleep(2) print("购物车里有:牛奶,面包,大米") home(‘zsz‘) shopping()
输出结果为:
认证方式是: filedb
用户名:zsz
密码:123
欢迎zsz回家
认证方式是: ldap
购物车里有:牛奶,面包,大米
函数运行时间为2.0004611015319824秒
以上是关于函数闭包带参数装饰器的主要内容,如果未能解决你的问题,请参考以下文章