タグ

ブックマーク / inarizuuuushi.hatenablog.com (1)

  • Python functoolsのlru_cache - Sabrou-mal サブロウ丸

    lru_cache lru_cacheは関数の引数と返り値を保存する。 from functools import lru_cache @lru_cache(maxsize=None) def fib(n): if n < 2: return n return fib(n-1) + fib(n-2) 公式の例。再帰的にフィボナッチ数を計算していますが、そのまま実行すると呆れるほど遅いです。 実際、この関数にnを渡すと約 回ほどこの関数が呼び出されることなりますが、関数の引数としてそのほとんどが、過去渡されたことのある引数が繰り返し渡されることになります。 @lru_cacheを関数の前につければ、引数nに対する返り値を保存します。つまり同じ引数が2回以上渡されるときは、2回目以降は実際に関数の中身を計算することはありません。 上記の例だと、これにより関数が呼び出される回数が約 回に減少する

  • 1