Python 3.x中的nonlocal及其在2.x中的变通办法

在Python 2.x中,函数内部可以定义函数,内层的函数可以读取外层函数的局部变量,但却不可以修改它.

    def outter():
        x = 1
        def inner():
            print("inner is called, x=", x)
        return inner

    outter()()

上面这个程序是没问题的,但是,下面这个就会出错:

    def outter():
        x = 1
        def inner():
            print("inner is called, x=", x)
            x = 2
        return inner

    outter()()

提示竟然是UnboundLocalError: local variable 'x' referenced before assignment,找不到变量 …

more ...