Tips
今日の開発Tips(2025-08-10)
関数呼び出しのオーバーヘッドを軽減するために、高頻度で呼び出される関数をデコレータでラップし、結果をキャッシュすることで、パフォーマンスを向上させることができます。これは、計算コストの高い処理や、外部APIへのリクエストなどを最適化するのに効果的です。キャッシュされた結果を再利用することで、無駄な計算を削減し、応答時間を短縮できます。
Pythonにおける関数呼び出しの高速化:デコレータとキャッシュ
functools.lru_cacheデコレータを使うことで、関数の戻り値をキャッシュし、同じ引数で関数が再度呼び出された場合、キャッシュされた値を返すようにすることができます。これにより、関数呼び出しのオーバーヘッドを大幅に削減できます。
from functools import lru_cache
@lru_cache(maxsize=None) # maxsize=None で無制限のキャッシュサイズ
def expensive_function(arg1, arg2):
# 計算コストの高い処理
# ...
result = arg1 + arg2
return result
# 関数を呼び出す
result1 = expensive_function(10, 20)
result2 = expensive_function(10, 20) # キャッシュから取得
print(result1, result2) # 同じ結果が返ってくる
maxsize引数でキャッシュサイズを指定できます。maxsize=Noneはキャッシュサイズを無制限にしますが、メモリ消費に注意が必要です。 キャッシュに適さない関数(副作用のある関数や、入力が時間によって変化する関数など)には使用しないようにしましょう。 頻繁に呼び出されるが、計算コストの高い関数に適用することで、大きなパフォーマンス改善が期待できます。