装饰器带参数

Posted ch2020

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器带参数相关的知识,希望对你有一定的参考价值。

 1 user_list = [
 2     {name:alex,passwd:123},
 3     {name:xiaopang,passwd:123},
 4     {"name":haha,passwd:1234}
 5 ]
 6 user_dic = {user_name:None,"login":False}
 7 def auth(auth_type = sqlite):
 8     def add_func(func):
 9         def wrapper(*args, **kwargs):
10             if auth_type == sqlite:
11                 print(登录类型为sqlite)
12                 if user_dic[user_name] and user_dic[login]:
13                     res = func(*args, **kwargs)
14                     return res
15                 username = input("亲,请输入你的用户名: ").strip()
16                 passwd = input("请输入密码").strip()
17                 for i in user_list:
18                     if username == i[name] and passwd == str(i[passwd]):
19                         user_dic[user_name] = username
20                         user_dic[login] = True
21                         res = func(*args, **kwargs)
22                         return res
23                 else:
24                     print("您输入的用户名或者密码错误")
25             elif auth_type == mysql:
26                 print(现在没学,不会)
27 
28         return wrapper
29     return add_func
30 @auth(auth_type=sqlite)  # 相当于先执行了auth(auth_type = ‘sqlite‘)  然后返回函数名add_func; 就相当于@add_func
31 def index():
32     print(欢迎来到京东商城)
33 @auth(auth_type=sqlite)
34 def home(name):
35     print("%s 欢迎回到主页" % name)
36 @auth(auth_type=sqlite)
37 def shopping_car(name):
38     print(%s的购物车里面有[手机、电脑、汽车]%name)
39 index()
40 home(liyulu)
41 shopping_car(liyulu)
42 输出:
43 登录类型为sqlite
44 亲,请输入你的用户名: sb
45 请输入密码123
46 您输入的用户名或者密码错误
47 登录类型为sqlite
48 亲,请输入你的用户名: alex
49 请输入密码123
50 liyulu 欢迎回到主页
51 登录类型为sqlite
52 liyulu的购物车里面有[手机、电脑、汽车]

 

以上是关于装饰器带参数的主要内容,如果未能解决你的问题,请参考以下文章

装饰器的应用-装饰器带参数和不带参数

python装饰器1

python装饰器带括号和不带括号的语法和用法

装饰器

python高级之装饰器

python 入坑路--装饰器(语法糖)--高高潮