装饰器
装饰器学习路径看下图
学习装饰器首先必须了解高阶函数定义,什么叫闭包
接下来看例子
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()
这个程序有一个问题,运行程序需要验证登录两次,正常情况下不应该是一个商场登录一次就可以记住登录状态了吗,解决方案参考装饰器练习题,已上传博客
本文来自博客园,作者:{落叶给树的留言},转载请注明原文链接:https://www.cnblogs.com/luoyegeishudeliuyan/p/15357223.html