2017-02-10 60 views
0

我有三个文件。在第一个中,我定义了全局变量。在Python中使用并设置跨越多个苍蝇的全局变量

# file1.py 
ABC = 111 

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

# file2.py 
from file1 import * 

def set_value(): 
    global ABC 
    ABC = 222 

在第三个文件,我尝试使用SET_VALUE()在file2.py定义改变全局变量的contect并打印。

# file3.py 

from file1 import * 
from file2 import * 

set_value() 
print ABC 

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

回答

2

线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 
+0

很好解释! – DaveBensonPhillips

0

您实际上并不想使用global关键字。与共享具有空对象类的全局状态类似,您可以创建一个空模块,通过该模块可以分配将随其导入的任何属性。见"How do I share global variables across modules?"从python3常见问题