1. ホーム
  2. python

python @functools.lru_cache で cache_clear() を使用するにはどうすればよいですか?

2023-09-22 10:42:46

質問

ドキュメント に記載されています。

また、このデコレータは cache_clear() 関数も提供します。 関数も提供します。

の使用方法についての例やガイダンスは提供されていません。 cache_clear()

2つ質問があります。

  • どのようにすれば cache_clear() を別の関数から実行できますか?
  • もし私が cache_clear() の呼び出しをキャッシュされる関数内に条件付きで入れた場合、それが実行されることはあるのでしょうか?

どのように解決するのですか?

キャッシュの他に lru_cache デコレータはまた、新しい関数を追加します。 cache_infocache_clear . 以下は、それらがどのように機能するかを説明するための簡単な例です。

>>> @lru_cache(5)
... def foo():
...     print('Executing foo...')
... 
>>> foo()
Executing foo...
>>> foo()
>>> foo.cache_info()
CacheInfo(hits=1, misses=1, maxsize=5, currsize=1)
>>> foo.cache_clear()
>>> foo()
Executing foo...

ご質問にお答えします。

<ブロッククオート

キャッシュされる関数の中に条件付きでcache_clear()の呼び出しを入れた場合、それが実行されることはあるのでしょうか?

結果がすでにキャッシュされていなければ、関数は実行され、あなたの条件に基づいて、実行されるべきです。 cache_clear . そうでなければ、最悪の場合は無効化されず、最良の場合は読めないコードになる危険性があります。

別の関数から cache_clear() を実行するにはどうすればよいですか?

単にキャッシュされた関数をインポートして cache_clear を呼び出すだけです。

from x import foo

def bar():
    foo.cache_clear()