Function decorator that caches function results

Tom Anderson twic at urchin.earth.li
Mon Oct 10 19:31:31 EDT 2005


On Mon, 10 Oct 2005, Steven D'Aprano wrote:

> On Sun, 09 Oct 2005 17:39:23 +0200, Fredrik Lundh wrote:
>
>> only if you're obsessed with CPython implementation details.
>
> No. I'm obsessed with finding out what closures are, since nobody seems 
> to have a good definition of them!

On the contrary - the problem is that several people have good but 
incompatible definitions of them!

I think you pretty much understand the mechanics of what's going on; i've 
spent god knows how long trying to write a clear but accurate definition 
of closures, but i can't, so i'm just going to say that (a) closures are 
functions, and (b) the things in func_closure are not closures - they're 
the variables over which a closure (the function you're inspecting) is 
closed; this is just sloppy terminology on the part of python's 
implementors.

Okay, a crack at a definition: a closure is a function in which some of 
the variable names refer to variables outside the function. And i don't 
mean global variables - i mean somebody else's locals; call them 'remote 
variables'. The 'somebody else' who owns those locals is a function whose 
scope encloses the definition of the closure function. A crucial point is 
that these names keep working even after the scope where they started out 
dies - when a closure escapes the 'mother scope' that houses its remote 
variables, those variables effectively transcend, becoming, well, i don't 
know. Nonlocal variables or something.

For some reason, this makes me think of Stephen Baxter novels. And a 
little of H. P. Lovecraft. I guess the point is that you shouldn't delve 
too deeply into the mysteries of functional programming if you wish to 
retain your humanity.

tom

-- 
Orange paint menace



More information about the Python-list mailing list