Python中nonlocal与global关键字的作用域差异解析

顾星河
顾星河
发布时间:2026-10-15| 2人浏览过
原创

本文详细解析Python中nonlocal与global关键字的区别。通过嵌套函数示例,展示nonlocal如何修改外层非全局变量,而global用于修改模块级全局变量。明确变量查找顺序及关键字对变量可见性的影响,帮助开发者正确管理作用域。

在Python中,解释器查找变量的顺序遵循LEGB规则:首先在当前作用域内查找局部变量,若未找到则向外层作用域(非全局)查找,接着在当前模块的全局变量中查找,最后才在Python内置变量中查找。

1. nonlocal关键字

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 = 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 时,表明该变量不仅对嵌套函数inner()有效,而是对包含它的大函数整体有效。

2. global关键字

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 关键字作用于整个环境下的全局变量,而非仅限于某个函数或类的局部变量。

以上就是关于Python中nonlocal与global关键字的详细解析,更多相关nonlocal与global关键字的内容可搜索本站历史文章或继续阅读后续相关文章,希望大家以后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。