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

Python 3 的'nonlocal”关键字与嵌套函数作用域中的'global”有何不同?

Patricia Arquette
Patricia Arquette原创
2024-12-15 01:56:09132浏览

How Does Python 3's `nonlocal` Keyword Differ from `global` in Nested Function Scopes?

Python 3 的“nonlocal”关键字:深入探究

“nonlocal”关键字在 Python 3 中具有重要用途,提供对在封闭范围内声明的变量,而不使用保留的全局关键字。这种细致入微的功能允许对嵌套函数内的变量引用进行特殊控制。

揭示非局部的角色

考虑以下不带“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”独立于外部函数中的变量“x”。这是因为内部函数的“x”变量在其自己的作用域内优先。

相反,引入“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”变量

非局部与全局

必须注意“非局部”和“全局”之间的区别。虽然这两个关键字都允许从嵌套范围访问变量,但它们有不同的用途。 “nonlocal”限制对仅在封闭范围中定义的变量的访问,而“global”提供对全局范围中定义的变量的访问。

为了更好地理解,请考虑使用“global”关键字的以下代码:

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

“global”关键字将“x”全局绑定到 true声明的变量,覆盖任何具有相同名称的局部或封闭变量。

结论

Python 3 中的“nonlocal”关键字提供了一个强大的工具来管理变量引用嵌套函数。它使在封闭范围内声明的变量可以在内部范围内访问和修改,从而对复杂代码结构中的变量使用提供更精细的控制。

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

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