python的global vs nonlocal

global 与 nonlocal 的区别总结

特性globalnonlocal
作用域层级 全局作用域(模块级别) 外层嵌套作用域(函数内部的函数)
适用场景 修改全局变量 修改外层函数的变量(闭包)
是否影响局部变量 不影响局部变量,但会修改全局变量 不影响全局变量,但会修改外层函数的变量
能否用于不存在的变量 可以(会创建新变量) 不能(必须已经存在)
能否用于内置变量 可以(不推荐) 不能
是否支持嵌套作用域

 

x = 100  # 全局变量

def outer():
    x = 200  # 外层函数变量

    def inner():
        global x  # 修改全局变量
        x += 10
        print("inner:", x)

    def inner2():
        nonlocal x  # 修改外层函数变量
        x += 10
        print("inner2:", x)

    inner()   # 修改全局 x
    inner2()  # 修改 outer 的 x

outer()
print("global x:", x)  # 输出: 110

  

posted @ 2025-06-01 18:03  iTech  阅读(24)  评论(0)    收藏  举报