syntax error on nonlocal statement in Python

前端 未结 2 546
温柔的废话
温柔的废话 2021-01-11 12:59

I would like to test the example of the use of the nonlocal statement specified in the answer on this question:

def outer():
   x = 1
   def inner():
                


        
相关标签:
2条回答
  • 2021-01-11 13:16

    Names listed in a nonlocal statement must not collide with pre-existing bindings in the local scope.

    https://docs.python.org/3/reference/simple_stmts.html#the-nonlocal-statement

    def outer():
        x = 1
        def inner():
            nonlocal x
            y = 2
            x = y
            print("inner: ", x)
        inner()
        print("outer: ", x)
    >>> outer()
    inner:  2
    outer:  2

    0 讨论(0)
  • 2021-01-11 13:29

    nonlocal only works in Python 3; it is a new addition to the language.

    In Python 2 it'll raise a syntax error; python sees nonlocal as part of an expression instead of a statement.

    This specific example works just fine when you actually use the correct Python version:

    $ python3.3
    Python 3.3.0 (default, Sep 29 2012, 08:16:08) 
    [GCC 4.2.1 Compatible Apple Clang 3.1 (tags/Apple/clang-318.0.58)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> def outer():
    ...    x = 1
    ...    def inner():
    ...        nonlocal x
    ...        x = 2
    ...        print("inner:", x)
    ...    inner()
    ...    print("outer:", x)
    ... 
    
    0 讨论(0)
提交回复
热议问题