Accessing Function Variables from Sub-functions

Diez B. Roggisch deets at nospam.web.de
Thu Oct 11 08:18:35 EDT 2007


Licheng Fang wrote:

> On Apr 14 2003, 10:30 pm, Alex Martelli <al... at aleax.it> wrote:
>> Sebastian Wilhelmi wrote:
>> > Hi,
>>
>> > I would like to do the following:
>>
>> > -------8<-------8<-------8<-------8<-------
>> > def test ():
>> >     count = 0
>> >     def inc_count ():
>> >         count += 1
>> >     inc_count ()
>> >     inc_count ()
>> >     print count
>>
>> > test ()
>> > -------8<-------8<-------8<-------8<-------
>>
>> > This doesn't work (and I even understand, why ;-)
>>
>> Specifically: a nested function cannot *RE-BIND* a variable of
>> an outer function.
>>
> 
> Sorry to dig up this old thread, but I would like to know what's the
> rationale is. Why can't a nested function rebind a variable of an
> outer function?

Because the lack of variable declarations in python makes the
left-hand-side-appearance of a variable the exact distinction criteria
between inner and outer scopes. Thus it can't rebind them. What you can do
is to use mutables as container for outer variables:


def outer():
    v =[1]
    def increment():
        a = v[0]
        a += 1
        v[0] = a
    increment()
    print v[0]


Diez



More information about the Python-list mailing list