python如何memoize方法

Sha*_*kan 3 python performance memoization cprofile

假设我是一个从给定参数创建字典的方法:

def newDict(a,b,c,d): # in reality this method is a bit more complex, I've just shortened for the sake of simplicity
    return { "x": a,
             "y": b,
             "z": c,
             "t": d }
Run Code Online (Sandbox Code Playgroud)

我有另一种方法,每次执行时调用newDict方法.因此,最后,当我看到我的cProfiler时,我看到这样的事情:

17874 calls (17868 primitive) 0.076 CPU seconds
Run Code Online (Sandbox Code Playgroud)

当然,我的newDict方法被称为1785时间.现在,我的问题是我是否可以记住newDict方法以减少通话时间?(只是为了确保,变量几乎在每个调用中都会发生变化,但我不确定它是否对记忆函数有影响)

子问题:我认为17k调用太多,代码效率不高.但是,通过查看统计数据,您还可以说明这是正常结果还是我有太多的电话而代码很慢?

agf*_*agf 9

  1. 你的意思是memoize没有memorize.
  2. 如果值几乎总是不同的,那么记忆将无济于事,它会减慢速度.
  3. 如果没有看到你的完整代码,知道应该做什么,我们怎么知道17k的通话是很多还是小的?


JBe*_*rdo 8

如果通过记忆你的意思是记忆,请使用functools.lru_cache.这是一个功能装饰者

  • 很遗憾没有在2.x中提供 (2认同)