在python中跨文件设置全局变量

时间:2015-11-08 06:31:10

标签: python python-2.7 global-variables

我想在文件p2.py中设置全局变量x的值。然后,该值将在p1.py中使用。但是,x的值不会在p1.py中更改。我尝试过使用global关键字。
谁能告诉我这段代码有什么问题:

p2.py

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

p1.py

from p2 import *
set_vals()
global x 
print x

由于

1 个答案:

答案 0 :(得分:3)

导入from p2 import *后,您将获得x1的本地副本。这与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指针不会改变xp1所指向的内容。 p1中的'x'始终指向与最初相同的东西。