2015-11-08 78 views
1

我想在文件p2.py中设置全局变量x的值。然后,这个值将在p1.py中使用。但是,p的值没有在p1.py中更改。我曾尝试使用全局关键字。
谁能告诉我什么是错在此代码:
在Python中设置跨文件的全局变量

p2.py

x='' 
def set_vals(): 
    global x 
    x='a' 

p1.py

from p2 import * 
set_vals() 
global x 
print x 

感谢

回答

1

一旦你有进口from p2 import *,你会得到一个p1的本地副本。这不是与p2中完全相同的x ...它现在是p1中的局部变量'x',它也指向与p2中的'x'相同的对象。

p中的p2.xx都是在import p2之后立即引用同一个实体。但是,运行set_vals()时,它仅更改p2模块内部的x(重新指定指针)的值。 p1模块内的x仍然指向旧的东西。

set_vals函数及其全局x仍然是p2模块的一部分,即使它们已被导入到p1中。因此,它们只会影响p2中x的值。发生这种情况是因为函数记住了它们的创建范围(阅读关闭以了解更多信息)。

你可以试试这个,这将做什么,我们期待......

import p2 
print p2.x 
p2.set_vals() 
print p2.x # p2.x will change 

你的代码等同于...

import p2 
x = p2.x 
set_vals = p2.set_vals 
del p2 

set_vals() # changes p2.x 
global x 
print x  # this and p2.x are not same anymore 

它清楚地表明在P1的x是单独的变量最初指向与p2中的'x'相同的对象。更改p2.x指针不会改变p1指向的x。 p1中的'x'一直指向与最初相同的东西。