离上一次写4天了,今天主要讲讲装饰器
装饰器:
原则:开放封闭原则,对扩展是开放的,对修改是封闭的
语法糖:@
作用:不想修改原函数的调用方式,但是还想在原来的函数前后添加功能
装饰器的固定模式:def wrapper(f):
def inner(*args,**kwargs):
#添加装饰器之前
ret = f(*args,**kwargs)
#添加装饰器之后
return ret
return inner
@wrapper #相当于func = wrapper(func)
def func() #被装饰的函数
pass
看不懂装饰器函数的话,简单理解一下:@wrapper直接就是将你装饰的函数变为装饰器函数的内函数
举例:
1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),
要求登录成功一次,后续的函数都无需再输入用户名和密码
FLAG = False
def login(f):
def inner(*args,**kwargs):
global FLAG
'''登录程序'''
if FLAG:
ret = f(*args,**kwargs)
return ret
else:
username = input('username')
password = input('password')
if username == '123' and password == '456':
FLAG = True
ret = f(*args,**kwargs)
return ret
return inner
@login
def shoplist_add():
print('添加一个数据')