lru_cacheの使い方

lru_cacheは、fuctoolsライブラリーに定義されているデコレーターです。
LRUは、Least Recently Usedの略で、最も直近で使われていないデータを最初に捨てるキャッシュアルゴリズムです。

ここでは、同じ引数であれば、結果をキャッシュして1回しか計算しない方法について説明します。

使い方は簡単で、関数にデコレーターの@lru_cache(maxsize=1024)を追加するだけです。

そうすると、引数をキーにした辞書(キャッシュ)に関数の実行結果があれば、実行せずにその結果を返します。
maxsizeは、キャッシュのサイズを指定します。デフォルトは128で小さいので、1024と大きい数字にしています。メモリ使用量を考慮しながら決めましょう。

from functools import lru_cache
# キャッシュなしで実行
class Fibonacci:
    count = 0
    def fib(self, n):
        Fibonacci.count += 1
        return n if n < 2 else self.fib(n - 1) + self.fib(n - 2)
Fibonacci().fib(30)
count1 = Fibonacci.count
count1
2692537
# キャッシュありで実行
class Fibonacci:
    count = 0
    @lru_cache(maxsize=1024)
    def fib(self, n):
        Fibonacci.count += 1
        return n if n < 2 else self.fib(n - 1) + self.fib(n - 2)
Fibonacci().fib(30)
count2 = Fibonacci.count
count2
31

コメント

タイトルとURLをコピーしました