个人理解的装饰器即将函数作为参数进行调用,适用于多个函数执行所要调用的公共代码,类似于unittest中的setup或者teardown。
引用规则
@装饰器方法名
实际应用
- 以登录功能为例,执行fun1,fun2都需要校验用户是否登录。
def is_login(func):
def decorate():
url = "" # 登录接口地址
header = {} # 登录接口请求体
body = {} # 登录接口请求体
response = requests.post(url=url,data=body,headers=header)
if response.status_code == 200:
print("登录成功")
func()
else:
print("登录失败,请重试")
return decorate
# 调用装饰器
def fun1():
"""
登录成功后执行的操作
"""
pass
# 调用装饰器
def fun2():
"""
登录成功后执行的操作
"""
pass
- 以0-100求和计算为例,函数是否带参数,是否带返回值,代码写法有所区别。
"""
不带参数,不带返回值
"""
def cal_sum_01(func):
def wrapper():
func()
return wrapper
def data_sum_01():
print(sum(range(1,100)))
"""
带参数,不带返回值
"""
def cal_sum_02(func):
def wrapper(number):
func(number)
return wrapper
def data_sum_02(number):
print(sum(range(1,number)))
"""
不带参数,带返回值
"""
def cal_sum_03(func):
def wrapper():
result = func()
print(result)
return wrapper
def data_sum_03():
return sum(range(1,100))
# 调用函数
data_sum_01()
data_sum_02(100)
data_sum_03()