Python全局变量与
关键字:何时需要声明?
Python中,全局变量的使用有时需要显式声明
关键字,有时则不需要,这常常让新手困惑。本文将通过示例详细解释
关键字的必要性。
问题源于:类方法试图访问和修改全局变量。仅读取时无需
;但修改时,必须使用
。
先看一段可运行代码:
立即学习
“
Python免费学习笔记(深入)
”;
类的
方法只读取全局变量
,无需
关键字。Python解释器直接找到并使用全局变量。
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
下载
但如果
方法试图修改
:
这段代码会抛出
异常。Python解释器认为
是局部变量,在赋值前就试图使用,导致错误。
解决方法是在
方法中声明
:
添加
后,Python解释器知道
是全局变量,代码正确运行并修改了全局变量。
结论:关键在于是否修改全局变量。只读取无需
;修改时,必须使用
声明,避免局部变量遮蔽全局变量。
globalglobalglobalglobalglobalfrom loguru import logger
success_list = [1, 2, 3, 4, 5, 6, 7, 8]
class MyClass:
def run(self):
logger.debug(success_list) # 只读取全局变量
MyClass().run()
logger.debug(success_list)MyClassrunsuccess_listglobalrunsuccess_listfrom loguru import logger
success_list = [1, 2, 3, 4, 5, 6, 7, 8]
class MyClass:
def run(self):
logger.debug(success_list)
success_list = success_list[1:] # 试图修改全局变量
logger.debug(success_list)
MyClass().run()
logger.debug(success_list)UnboundLocalErrorsuccess_listrunglobalfrom loguru import logger
success_list = [1, 2, 3, 4, 5, 6, 7, 8]
class MyClass:
def run(self):
global success_list # 声明全局变量
logger.debug(success_list)
success_list = success_list[1:]
logger.debug(success_list)
MyClass().run()
logger.debug(success_list)global success_listsuccess_listglobalglobal