定义了一个装饰器timer
,它测量并打印出被装饰函数的执行时间。这个装饰器使用了Python的time
模块来记录函数开始和结束的时间点,然后计算并输出函数的运行时长。使用@timer
语法将这个装饰器应用到了fibonacci
函数上,这是一个递归实现的斐波那契数列计算函数。
当调用fibonacci(10)
时,timer
装饰器会自动捕获函数执行前后的时刻,并计算两者之差,即函数的实际运行时间。然后,它会打印出函数名称以及该函数执行所花费的时间,单位是秒。最后,它返回fibonacci
函数的计算结果。
然而,值得注意的是,递归实现的斐波那契数列计算在n较大时效率非常低下,因为它重复计算了许多相同的子问题。在实际应用中,特别是对于较大的n值,通常会采用动态规划或记忆化递归来提高效率。例如,你可以使用一个缓存机制来存储已经计算过的斐波那契数值,避免重复计算。
import time
from functools import lru_cache
# 定义一个装饰器,用于打印函数的执行时间
def timer(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f"{func.__name__} took {end - start} seconds to run.")
return result
return wrapper
# 使用lru_cache装饰器缓存结果,优化递归函数
@lru_cache(maxsize=None)
def fibonacci(n):
if n < 2:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
# 使用@符号将timer装饰器应用到fibonacci函数上
fibonacci = timer(fibonacci)
# 调用fibonacci函数,会自动打印执行时间
fibonacci(10)
标签:并打印,return,函数,递归函数,timer,fibonacci,time,装饰
From: https://blog.csdn.net/weixin_45339016/article/details/140205046