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中文网其他相关文章!