@lru_cache caches function results based on arguments.
1from functools import lru_cache23@lru_cache(maxsize=128)4def fibonacci(n):5 if n < 2:6 return n7 return fibonacci(n-1) + fibonacci(n-2)89print(fibonacci(100)) # Fast! Cached results1011# Cache info12print(fibonacci.cache_info())13# CacheInfo(hits=98, misses=101, maxsize=128, currsize=101)1415# Clear cache16fibonacci.cache_clear()1718# Without arguments (Python 3.9+)19from functools import cache2021@cache22 def expensive(x):23 return x ** 22425# Custom key function26from functools import lru_cache2728def custom_key(args, kwargs):29 return (args, tuple(sorted(kwargs.items())))3031@lru_cache(maxsize=128, key=custom_key)32def api_call(url, timeout=30):33 return requests.get(url, timeout=timeout)3435# Caching with dict (no maxsize)36cache = {}3738def cached_function(n):39 if n not in cache:40 cache[n] = expensive_computation(n)41 return cache[n]
LRU = Least Recently Used:
maxsize=None for unlimited cache.