Python变量作用域详解:全局与局部变量的区别及global关键字用法

江岸
江岸
发布时间:2026-10-13| 5人浏览过
原创

本文深入解析Python中变量作用域的核心概念,区分全局变量与局部变量的定义与作用范围。重点讲解如何在函数内部通过global关键字修改全局变量,以及列表和字典等可变对象在作用域中的特殊行为与赋值限制,帮助开发者避免常见的变量引用错误。

Python变量作用域基础

变量作用域

在Python中,通常在函数外部定义的变量被称为全局变量,而在函数内部定义的变量则被称为局部变量。

全局变量可以在程序的任何作用域中被读取,而局部变量仅在其定义的函数内部可见和可读。

当函数需要读取变量时,Python会优先查找函数内部定义的局部变量;如果未找到,则继续向上查找全局变量。

全局变量的读写规则与global关键字

全局变量

读取操作:在任何作用域中均可访问。

赋值操作:若需在函数内修改全局变量,必须使用global关键字声明。

对于字典和列表等可变对象,可以直接修改其内部元素,无需使用global关键字;但若尝试重新赋值整个变量,则必须使用global。

命名规范:通常建议将全局变量全部大写,以区别于局部变量。

代码示例与可变对象处理

例如


name = 'Tim' #全局变量
def f1():
  age = 18 #局部变量
  print(age,name)
 def f2():
  age=19 #局部变量
f1()
f2()
>>>
18 Tim
19 Tim

我们可以在函数内部定义并修改全局变量,具体实现如下所示。


name = 'Tim' #全局变量
def f1():
  age = 18 #局部变量
  global name #定义全局变量
  name = 'Eric'
  print(age,name)
f1()
print(name)

全局变量默认具有可读性。如果需要在函数内部改变全局变量的值,必须使用global关键字进行声明。

特殊情况:列表和字典允许直接修改其内容(如append),但不能直接重新赋值整个变量。若需重新赋值,必须在函数内部使用global关键字声明该全局变量。


NAME = ['Tim','mike'] #全局变量
NAME1 = ['Eric','Jeson'] #全局变量
NAME3 = ['Tom','jane'] #全局变量
def f1():
  NAME.append('Eric') #列表的append方法可改变外部全局变量的值
  print('函数内NAME: %s'%NAME)
  NAME1 = '123' #重新赋值不可改变外部全局变量的值
  print('函数内NAME1: %s'%NAME1)
  global NAME3 #如果需要重新给列表赋值,需要使用global定义全局变量
  NAME3 = '123'
  print('函数内NAME3: %s'%NAME3)
f1()
print('函数外NAME: %s'%NAME)
print('函数外NAME1: %s'%NAME1)
print('函数外NAME3: %s'%NAME3)
>>>

函数内NAME: ['Tim', 'mike', 'Eric']

函数内NAME1: 123

函数内NAME3: 123

函数外NAME: ['Tim', 'mike', 'Eric']

函数外NAME1: ['Eric', 'Jeson']

函数外NAME3: 123

至此,关于Python变量作用域的讲解结束。如需了解更多相关内容,请查阅本站过往文章或继续浏览后续文章,感谢您的支持!

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

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 算法库。