内部函数不打印非局部变量

Inner function not printing nonlocal variable

我有一个 outer function2 inner functions.

def outer():
    x = 'hello'    
    def inner1():
        def inner2():
            nonlocal x
            x = 'python'        
        inner2()
        print(x)
outer()

请帮我理解为什么上面的代码没有打印 x.

的值

根据我的理解,它应该打印 "hello"

您的代码调用 outer(),而后者仅执行一条语句:

x = 'hello'

就目前而言,您问题中的代码不会打印任何内容。

如果您要在调用 outer() 之后添加行 print(x),它确实会按照您的建议打印 "hello"

如果您改为添加行 inner1() 以使用 outer() 中定义的名称调用函数,那么 inner1() 将依次调用 inner2()这反过来会导致 x = 'python' 执行,这会改变 x 的值和(感谢 inner2() 中的 nonlocal x 行)语句 print(x)inner1() 内会导致代码打印 "python".