【问题标题】:python time module surprising resultspython时间模块出人意料的结果
【发布时间】:2021-06-18 05:15:14
【问题描述】:

我刚刚阅读了 lru_cache 装饰器并运行了以下实验。

from functools import lru_cache
import time

def fib_wo_cache(n):
  return n if n < 2 else fib_wo_cache(n-1) + fib_wo_cache(n-2)

begin = time.time()
fib_wo_cache(35)
end = time.time()
print("time it took without cache: ", end-begin)


@lru_cache(maxsize=2000)
def fib_w_cache(n):
  return n if n < 2 else fib_wo_cache(n-1) + fib_wo_cache(n-2)

begin = time.time()
fib_w_cache(35)
end = time.time()
print("time it took with cache: ", end-begin)

结果让我吃惊:

time it took without cache:  4.684133052825928
time it took with cache:  4.4438371658325195

但是,一旦我通过只保留一个函数来一次测量一个缓存和非缓存函数,我会得到:

not cached: 4.3182690143585205
cached: 0.00010395050048828125

缓存的后一个结果对我来说更有意义,因为它明显更快。缓存的两个结果之间的差异是如此巨大 - 你对我做错了什么有任何直觉吗?

谢谢!

【问题讨论】:

    标签: python time fibonacci lru


    【解决方案1】:

    你犯了一个非常简单的错误——带缓存的fib内部调用了不带缓存的fib。

    试试

    @lru_cache(maxsize=2000)
    def fib_w_cache(n):
      return n if n < 2 else fib_w_cache(n-1) + fib_w_cache(n-2)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 2020-04-29
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      相关资源
      最近更新 更多