什么是装饰器
本质:就是一个函数,能为其它的函数增加额外功能
# 目标函数
def power_num(n):
"""
计算并返回1-n之间每个数的平方和
:param n:
:return:
"""
total = 0
for i in range(1, n+1):
total += i ** 2
"""
额外的功能能统计目标函数执行的耗时
"""
def power_num(n):
"""
计算并返回1-n之间每个数的平方和
:param n:
:return:
"""
start_time = time()
total = 0
for i in range(1, n+1):
total += i ** 2
end_time = time()
print("函数执行的耗时:{}".format(end_time - start_time))
return total
if __name__ == '__main__':
print(power_num(30000000))
# 定义装饰函数--能统计目标函数执行的耗时
def elapsed_time(func):
"""能统计目标函数执行的耗时"""
def decorated(*args, **kwargs):
start_time = time()
# 由于目标函数有可能传入一个参数,两个参数或者是关键字参数,所以这里用通用参数占位
result = func(*args, **kwargs)
end_time = time()
print("函数执行的耗时:{}".format(end_time - start_time))
return result
return decorated
# 目标函数
def power_num(n):
"""
计算并返回1-n之间每个数的平方和
:param n:
:return:
"""
total = 0
for i in range(1, n+1):
total += i ** 2
return total
if __name__ == '__main__':
# 调用装饰函数去装饰目标函数,返回被装饰后的函数 相当于在目标函数上添加@elapsed_time
# 对目标函数进行elapsed装饰器函数的调用,返回一个装饰后的名字还是叫power_num的函数
power_num = elapsed_time(power_num)
print(power_num(30000000))
# 装饰函数需要传入参数
def elapsed_pre(pre):
"""装饰函数需要传入参数"""
def elapsed_time(func):
"""能统计目标函数执行的耗时"""
def decorated(*args, **kwargs):
start_time = time()
# 由于目标函数有可能传入一个参数,两个参数或者是关键字参数,所以这里用通用参数占位
result = func(*args, **kwargs)
end_time = time()
print("函数执行的耗时:{}".format(round((end_time - start_time), pre)))
return result
return decorated
return elapsed_time
# 目标函数
@elapsed_pre(3)
def power_num(n):
"""
计算并返回1-n之间每个数的平方和
:param n:
:return:
"""
total = 0
for i in range(1, n+1):
total += i ** 2
return total
if __name__ == '__main__':
print(power_num(30000000))