在Python中使用和设置多个苍蝇的全局变量

时间:2017-02-10 16:54:53

标签: python file import global

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

# 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中设置全局值?

2 个答案:

答案 0 :(得分:3)

from file1 import *行做了两件事:

  1. 它将文件file1.py导入模块缓存。
  2. 它会在本地命名空间中创建所有已定义符号的新引用。
  3. 由于您有单独的引用,因此无法更新模块中的引用。如果这些是可变变量,您可以更新它们并在模块本身中查看这些更新。例如,如果您有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?"