理解:
装饰器:我在知乎看到这样一个比方(我们的函数好比内裤,作用是遮羞。但在一些特定的环境,内裤明显满足不了我们的需求,冬天它没法为我们防风御寒。所以有了长裤,装饰器就像长裤,在不影响内裤作用的前提下,给我们的身子提供了保暖的功效)
装饰器是对原函数的一种扩展,本质是一个python函数,在原函数不需要做任何代码变动的前提下增加额外功能,在场景:插入日志、性能测试、事务处理、权限校验等应用广泛。遵守封闭开放原则,对源代码修改封闭,对功能外部增加开放。
需求:
在电商平台中,我们可以看到,在不同的页面,如选择商品、购物车、金融支付等页面都能进行登陆且能记住登陆状态,登陆一次后就不需要在其它页面再次登陆。使用装饰器把登陆抽离出来。
- 加入文件读写判断用户名密码
- 用户选择不同页面登陆时,反回不同结果
分析:
- 创建登陆标志位(login_falg),用来判断是否已登陆
- 商品commodity()金融finance()购物车shopp_cart()为三个独立函数
- 使用带参装饰器,反回不同结果
- 用户选择进行测试
代码:
#登陆标志位,用来判断是否已登陆 login_falg = True #获取文件中的用户名密码 with open(‘jd_username_password‘,‘r‘,encoding=‘utf8‘) as f: str = f.read().split(‘,‘) #带参装饰器,用于判断用户类型登陆 def login_type(type): def login(f): #修改全局变量 global login_falg def type_login(): global login_falg if login_falg : #用户输入用户名密码 user_name = input(‘user_name:‘).strip() user_password = input(‘user_password:‘).strip() #判断用户类型 if type == ‘jd‘: #判断用户名密码是否正确 if user_name == str[0] and user_password == str[1]: print(‘登陆成功!‘) f() login_falg = False else: print(‘用户名密码错误,请重新输入!‘) elif type == ‘weixin‘: pass elif type == ‘amazan‘: pass else: print(‘用户已登陆!‘) return type_login return login #商品 @login_type(‘jd‘) def commodity(): print(‘商品功能‘) pass #金融 @login_type(‘weixin‘) def finance(): print(‘金融功能‘) pass #购物车 @login_type(‘amazan‘) def shopp_cart(): print(‘购物车功能‘) pass #用户选择类型进行测试 while(True): user_type = input(‘请选择类型:\n1:[商品]\n2:[金融支付]\n3:[购物车]‘).strip() if user_type == ‘1‘: commodity() elif user_type == ‘2‘: finance() elif user_type == ‘3‘: shopp_cart() else: print(‘输入非法,请重新输入!‘)
时间: 2024-10-09 19:18:26