On 22/06/13 17:04, Peter Otten wrote:
This technique of nesting a function inside another function ("closure")

To be pedantic, not all nested functions are closures. Here's one which is not:


def outer(arg):
    def inner(x):
        return x + 1
    assert inner.__closure__ is None
    return inner(arg)


In this case, the inner function does not refer to any variables defined in the 
outer function. Instead, it is explicitly passed the value it needs as an 
argument.

Here's one which is a closure:


def outer(arg):
    def inner():
        return arg + 1
    assert inner.__closure__ is not None
    return inner()


The function attribute "__closure__" is set to None for regular functions. For closures, 
it is set to a bunch of stuff needed for the inner function to work correctly. (No user serviceable 
parts inside.) Basically, the inner function needs to carry around with it a little piece of its 
environment, so it can retrieve the value of "arg" when required.



--
Steven
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to