Function decorator that caches function results

Steven D'Aprano steve at
Sun Oct 9 13:27:37 CEST 2005

On Sun, 09 Oct 2005 02:49:38 -0700, Paul Rubin wrote:

>> I'm curious... where does cache live after you use cache_function to
>> memoize some function? It doesn't appear to be an attribute of the newly
>> memoized function, nor does it look like a global variable.
> It's in the closure returned by cache_function.

What's a closure?

Googling on define:closure isn't very useful. There are a *lot* of
different meanings for closure, none of them to do with programming.

No, wait, I tell a lie -- Wikipedia to the rescue again:

I notice that type(some_closure) and type(ordinary_function) both return
the same result, <type 'function'>. I also notice that both the closure
and ordinary functions have an attribute "func_closure". Is there a way to
tell which is a closure and which is not? In my tests, the ordinary
function has func_closure == None, but I don't know if that will always be
the case of just for my tests.

If I wanted to inspect the value of cache, where would I find it? In other
words, if I say some_closure.SOMETHING I would get cache... what should
SOMETHING be set to?

That assumes that cache can be seen in this way. If it can't, is this a
way to create "really private" variables in Python?


More information about the Python-list mailing list