一个强大而有用的工具是 functools
模块中的 lru_cache
装饰器。lru_cache
是 “Least Recently Used(最近最少使用)” 的缩写,是 Python 中用于缓存函数结果的装饰器。它的作用是在函数调用时缓存参数和结果,以便在后续相同参数的调用中直接返回缓存的结果,而不重新执行函数体。
基本用法
lru_cache
的主要优势之一是避免在相同参数下的重复计算。
1 | from functools import lru_cache |
第一次调用 fibonacci(10)
会计算结果并将其缓存起来。第二次调用相同的参数时,直接从缓存返回结果,而不重新计算。
对象方法中的应用
lru_cache
不仅仅可以用于普通函数,还可以用于类的方法。如果方法的结果仅取决于其参数,并且不依赖于对象的状态,那么可以使用 lru_cache
提高性能。
1 | from functools import lru_cache |
注意的是 如果使用 @staticmethod 装饰器装饰的方法,那么 lru_cache 缓存会是共享的,不同实例之间的缓存是相同的。这是因为静态方法没有实例作为第一个参数,它是在类级别上调用的,因此只有一个缓存。
1 | from functools import lru_cache |
对于静态方法而言,它是在类级别上调用的,而不是在实例级别上。即使实例化后调用,也会共享相同的缓存:
1 | my_class1 = MyClass() |