被装饰的函数经过装饰器函数后,变成装饰后的函数,增加了额外的功能。
函数功能:创建一个可以测量一般函数运行时间的装饰器。参考b站教程
import time
def elapsed_precision(p):
def elapsed(target):
def decorated(n):
start = time.time()
f = target(n)
end = time.time()
print(f'time:', round(end - start, p), 's')
return f
return decorated
return elapsed
# @elapsed
@elapsed_precision(5)
def power_sum(n):
sum_n = 0
for i in range(n + 1):
sum_n += i ** 2
return sum_n
if __name__ == '__main__':
# power_sum = elapsed(power_sum) # 等效于@elapsed
print(power_sum(10000000))
其中如果参数的数量不确定,可以把下面这段改成更一般的写法。
def decorated(n):
start = time.time()
f = target(n)
end = time.time()
print(f'time:', round(end - start, p), 's')
return f
改为:
def decorated(*args, **kwargs):
start = time.time()
f = target(*args, **kwargs)
end = time.time()
print(f'time:', round(end - start, p), 's')
return f