装饰器

装饰器学习路径看下图

 

 

学习装饰器首先必须了解高阶函数定义,什么叫闭包

接下来看例子

 1 def outher():
 2     x=1
 3     def inner():
 4         print(x)
 5     return inner
 6 f=outher()
 7 f()
 8 '''
 9 inner()函数的执行是在outher()的外面,还能够访问到outher内的变量x
10 这个就是闭包
11 '''
12 '''装饰器函数'''
13 user_name='123'
14 user_pwd=123
15 def user_regiest(func):
16     def inner():
17         user_input_name=input('请输入用户名>>>').strip()
18         user_input_pwd=input('请输入密码>>>').strip()
19         if user_input_pwd.isdigit():
20             user_input_pwd=int(user_input_pwd)
21             if user_input_name==user_name and user_input_pwd==user_pwd:
22                 func()
23             else:
24                 print('密码或用户名错误')
25                 jd_show_shop()
26         else:
27             print('密码或用户名错误,请重新输入>>>')
28             jd_show_shop()
29     return inner
30 '''京东购物程序'''
31 @user_regiest #等价于 jd_show_shop=user_regiest(jd_show_shop)注意 这样写这行代码就不是写在这里了,不清楚的看下图
32 def jd_show_shop():
33     print('欢迎来到京东购物商场'.center(50,'*'))
34     print('''
35     1:apple---100
36     2:iphone--10
37     3:huawei p30--20000
38     ''')
39 @user_regiest
40 def choose_shop():
41     user_choose=input('请选择商品序号>>>').strip()
42     if user_choose.isdigit():
43         user_choose=int(user_choose)
44         print('成功加入购物车')
45 '''在购物商场的基础上,利用装饰器添加登录验证功能'''
46 jd_show_shop()
47 choose_shop()

 

这个程序有一个问题,运行程序需要验证登录两次,正常情况下不应该是一个商场登录一次就可以记住登录状态了吗,解决方案参考装饰器练习题,已上传博客

posted @ 2021-09-30 16:09  落叶给树的留言  阅读(35)  评论(0)    收藏  举报