在python中跨文件设置全局变量
我想在p2.py文件中设置全局变量x的值。然后,该值将在p1.py中使用。但是,在p1.py中x的值没有改变。我尝试过使用全局关键字在python中跨文件设置全局变量,python,python-2.7,global-variables,Python,Python 2.7,Global Variables,我想在p2.py文件中设置全局变量x的值。然后,该值将在p1.py中使用。但是,在p1.py中x的值没有改变。我尝试过使用全局关键字 谁能告诉我这段代码有什么问题: p2.py x='' def set_vals(): global x x='a' from p2 import * set_vals() global x print x p1.py x='' def set_vals(): global x x='a' from p2 import * set_v
谁能告诉我这段代码有什么问题:
p2.py
x=''
def set_vals():
global x
x='a'
from p2 import *
set_vals()
global x
print x
p1.py
x=''
def set_vals():
global x
x='a'
from p2 import *
set_vals()
global x
print x
谢谢一旦您从p2导入*导入了
,您将获得p1本地的x的副本。这与p2中的x不完全相同。。。它现在是p1中的局部变量“x”,它也指向与p2中的“x”相同的对象
p中的p2.x
和x
都是在import p2
之后对同一实体的引用。但是,当您运行set\u 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'始终指向与最初相同的对象