在 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 * 做了两件事:

  1. 它将文件 file1.py 导入到模块缓存中。
  2. 它会在您的本地命名空间中创建所有已定义符号的新引用。

因为您有单独的引用,所以您无法更新模块中的引用。如果这些是 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