我有三个文件。在第一个中,我定义了全局变量。
# file1.py
ABC = 111
在第二个文件中,我更改了全局变量的内容。
# file2.py
from file1 import *
def set_value():
global ABC
ABC = 222
在第三个文件中,我尝试使用file2.py中定义的set_value()来更改全局变量的contect并打印它。
# file3.py
from file1 import *
from file2 import *
set_value()
print ABC
结果是111而不是222.新值未在全局变量中设置。如何使用file2.py中的函数在file1.py中设置全局值?
答案 0 :(得分:3)
第from file1 import *
行做了两件事:
file1.py
导入模块缓存。由于您有单独的引用,因此无法更新模块中的引用。如果这些是可变变量,您可以更新它们并在模块本身中查看这些更新。例如,如果您有ABC = [111]
,则可以执行ABC[0] = 222
,您会看到更改。
如果要更改模块本身,则需要使用模块的引用;模块是可变的!
# file2.py
import file1
def set_value():
file1.ABC = 222
# file3.py
import file1
from file2 import *
set_value()
print file1.ABC
答案 1 :(得分:0)
您实际上并不想使用global关键字。与使用空对象类共享全局状态类似,您可以创建一个空模块,使用该模块可以分配将在其导入的任何位置跟随的属性。请参阅python3 faq中的"How do I share global variables across modules?"