python functools cache