首页 >后端开发 >Python教程 >Python 的'nonlocal”关键字与作用域管理中的'global”有何不同?

Python 的'nonlocal”关键字与作用域管理中的'global”有何不同?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-11 19:05:11890浏览

How Does Python's `nonlocal` Keyword Differ from `global` in Scope Management?

理解“nonlocal”在 Python 3 中的作用

在 Python 3 中,“nonlocal”在访问定义在 Python 中的变量中起着至关重要的作用。一个封闭范围,但在当前范围之外。与引用全局作用域中的变量的“global”不同,“nonlocal”允许您与父函数作用域中的变量进行交互。

在不使用“nonlocal”的情况下考虑此示例:

x = 0
def outer():
    x = 1
    def inner():
        x = 2
        print("inner:", x)

    inner()
    print("outer:", x)

outer()
print("global:", x)

输出:

inner: 2
outer: 1
global: 0

我们可以看到,内部函数中的变量“x”被赋值为局部值2,而外部函数中的变量“x”保持为1。全局变量“x”保留其初始值0。

现在,让我们使用“nonlocal”重写这段代码:

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

    inner()
    print("outer:", x)

outer()
print("global:", x)

输出:

inner: 2
outer: 2
global: 0

使用“nonlocal”,内部函数中的变量“x”现在绑定到该变量外部函数中的“x”。因此,当内部函数中修改“x”时,也会影响其在外部函数中的值。全局变量“x”保持不变。

相反,“global”会将内部函数中的变量“x”绑定到全局范围内的变量:

x = 0
def outer():
    x = 1
    def inner():
        global x
        x = 2
        print("inner:", x)
        
    inner()
    print("outer:", x)

outer()
print("global:", x)

输出:

inner: 2
outer: 1
global: 2

理解“非局部”和“全局”之间的细微差别对于有效管理 Python 代码中的变量至关重要。

以上是Python 的'nonlocal”关键字与作用域管理中的'global”有何不同?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn