在Python的不同模块中使用全局变量
简要介绍如何在Python
中利用global关键字定义的全局变量在不同模块间共享,避免后续重复犯错。
背景
它们位于同一个模块下:
$ ls
__pycache__/ app1.py main.py
各自内容分别如下
app1.py
有一个 global
修饰的全局变量,通过set_variables
方法对其值进行修改
MESSAGE = None
def set_variables():
global MESSAGE
MESSAGE = "Hello Python"
main.py
主程序,调用上述方法并打印出MESSAGE
的值
from app1 import set_variables
if __name__ == '__main__':
set_variables()
# print(MESSAGE)
不生效用法
一开始自己想复用import xxx from xxx
这种用法,将main.py
修改为如下
from app1 import set_variables, MESSAGE
if __name__ == '__main__':
set_variables()
print(MESSAGE)
结果输出值为None
,没有达到预期的结果。
正确用法
直接用import xxx
实现
import app1
if __name__ == '__main__':
app1.set_variables()
print(app1.MESSAGE)
或用import xxx as xxx
给其加上一个别名
import app1 as a
if __name__ == '__main__':
a.set_variables()
print(a.MESSAGE)
原因分析
参见Global variable not changing between files in python中的大佬回答如下:
The syntax
from globals.py import *
makes copies of the variables withinglobals.py
into your local file. To access the variables themselves without making copies,import globals
and use the variable directly:globals.filename
. You no longer need theglobal
keyword if you access the variable this way.