How can you configure lru_cache to key its cache based on actual values received, rather than how the function was called?
>>> from functools import lru_cache
>>> @lru_cache
... def f(x=2):
... print("reticulating splines...")
... return x ** 2
...
>>> f()
reticulating splines...
4
>>> f(2)
reticulating splines...
4
>>> f(x=2)
reticulating splines...
4
In other words, only the first call above should be a cache miss, the other two should be cache hits.