On Mon, Feb 23, 2009 at 12:06 AM, neoedmund <neoedm...@gmail.com> wrote: > see the 3 small piece of code, i cannot understand why it result as > this. > > 1. > def test(): > abc="111" > def m1(): > print(abc) > m1() > test() > > Output: 111 > > 2. > def test(): > abc="111" > def m1():
You need a 'nonlocal' declaration here (requires Python 3.0 I think). See PEP 3104 for more info -- http://www.python.org/dev/peps/pep-3104/ > print(abc) > abc+="222" > m1() > test() > > Output: > print(abc) > UnboundLocalError: local variable 'abc' referenced before assignment > > 3. > def test2(): > abc=[111] > def m1(): > print(abc) > abc.append(222) > m1() > print(abc) > test2() > > Output: > [111] > [111,222] > > it seems "you cannot change the outter scope values but can use it > readonly." Yeah, that's basically how nested scopes (sans 'nonlocal') work in Python, since assignment typically constitutes an implicit scope declaration. Cheers, Chris -- Follow the path of the Iguana... http://rebertia.com -- http://mail.python.org/mailman/listinfo/python-list