【1.55】装饰器带参数-京东实验

#定义多个数据库  便于 装饰器来选择 参数    
#为能 不改变 函数的内部代码 以及原先装饰器部分代码
#保证内层的函数能用到 参数 进行选择 执行
#要用再在原先的装饰器函数外嵌套一层 将外层参数传到内层 也是闭包的概念
usr_dict ={"name":None,"login_stat":False} def auth(data="filedb"): #嵌套一个函数 def auth_func(func): def wrapper(*args,**kwargs): if usr_dict["login_stat"] == False: name = input("用户名:").strip() passwrd = input("密码:").strip() if data == "filedb": #使用外层函数传来的变量 with open("test","r",encoding="utf-8") as f: for filedict in f: i = eval(filedict) #eval 取出来的值 本身是什么就是什么 if i["name"]==name and str(i["passwrd"])==passwrd: usr_dict["login_stat"]=True usr_dict["name"]=name print("登陆成功") res = func(*args,**kwargs) print (res) return res else: print("用户名密码有误") elif data == "ldtp": #使用外层函数的传来的参数 print("鬼知道用什么方法") res = func(*args, **kwargs) print(res) return res else: print("随便玩嘛") #使用外层函数传来的参数 res = func(*args, **kwargs) print(res) return res else: res = func(*args, **kwargs) print(res) return res return wrapper return auth_func @auth("mysql") def jd_shopping_car(name): return "%s购物车[%s,%s]"%(name,"牛奶","面包") @auth("filedb") def jd_index(): return "欢迎来到京东" @auth("ldtp") def jd_home(name): return "欢迎回家%s"%name jd_shopping_car("产品经理") jd_home("产品经理") jd_index()

 

posted @ 2016-04-16 16:25  科学小怪癖  阅读(92)  评论(0)    收藏  举报