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

Reply via email to