在 Python 中跨多个文件使用和设置全局变量
Use and set global variables across multiple files in Python
我有三个文件。在第一个中,我定义了全局变量。
# 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 中的全局值?
您实际上并不想为此使用全局关键字。类似于与空对象 class 共享全局状态,您可以创建一个空模块,您可以使用它分配属性,无论它被导入到哪里。请参阅 python3 常见问题解答
中的 "How do I share global variables across modules?"
行 from file1 import *
做了两件事:
- 它将文件
file1.py
导入到模块缓存中。
- 它会在您的本地命名空间中创建所有已定义符号的新引用。
因为您有单独的引用,所以您无法更新模块中的引用。如果这些是 mutable 变量,您可以更新它们并在模块本身中查看这些更新。例如,如果您有 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
我有三个文件。在第一个中,我定义了全局变量。
# 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 中的全局值?
您实际上并不想为此使用全局关键字。类似于与空对象 class 共享全局状态,您可以创建一个空模块,您可以使用它分配属性,无论它被导入到哪里。请参阅 python3 常见问题解答
中的 "How do I share global variables across modules?"行 from file1 import *
做了两件事:
- 它将文件
file1.py
导入到模块缓存中。 - 它会在您的本地命名空间中创建所有已定义符号的新引用。
因为您有单独的引用,所以您无法更新模块中的引用。如果这些是 mutable 变量,您可以更新它们并在模块本身中查看这些更新。例如,如果您有 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