Function decorator that caches function results
Paul Rubin
http
Mon Oct 10 20:04:47 EDT 2005
Tom Anderson <twic at urchin.earth.li> writes:
> Okay, a crack at a definition: a closure is a function in which some
> of the variable names refer to variables outside the function.
That's misleading, I'd say a closure is a combination of a function
(executable code) and a lexical environment (the values of the
function's free variables, as taken from surrounding scopes at the
time the function was created). For example:
def f(n):
def g(): return n
return g
h1 = f(1)
h2 = f(2)
h1 and h2 are two different closures. They have the same executable
code but their environments are different. In h1, n=1, but in h2, n=2.
So, h1() will return 1 but h2() will return 2. Is there really anything
confusing about this? All that's happened is that when you call f, f
allocates a memory slot for n. g makes a reference to the slot and
then f returns. Since the reference to the slot still exists, the slot
doesn't get GC'd. When you call f again, it allocates a new slot.
This is all described in SICP (mitpress.mit.edu/sicp).
More information about the Python-list
mailing list