【问题标题】:Use and set global variables across multiple files in Python在 Python 中跨多个文件使用和设置全局变量
【发布时间】:2017-02-10 16:54:52
【问题描述】:

我有三个文件。在第一个中,我定义了全局变量。

# file1.py
ABC = 111

在第二个文件中,我更改了全局变量的内容。

# file2.py
from file1 import *

def set_value():
    global ABC
    ABC = 222

在第三个文件中,我尝试使用file2.py中定义的set_value()来改变全局变量的内容并打印出来。

# file3.py

from file1 import *
from file2 import *

set_value()
print ABC

结果是 111 而不是 222。新值未设置在全局变量中。如何使用 file2.py 中的函数在 file1.py 中设置全局值?

【问题讨论】:

    标签: python file import global


    【解决方案1】:

    from file1 import * 行做了两件事:

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

    因为您有单独的引用,所以您无法更新模块中的引用。如果这些是 可变 变量,您可以更新它们并在模块本身中查看这些更新。例如,如果你有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
    

    【讨论】:

    • 解释得很好!
    【解决方案2】:

    您实际上并不想为此使用 global 关键字。与与空对象类共享全局状态类似,您可以创建一个空模块,您可以使用该模块分配属性,这些属性将跟随它被导入的任何地方。请参阅 python3 常见问题解答中的"How do I share global variables across modules?"

    【讨论】:

      猜你喜欢
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      相关资源
      最近更新 更多