Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中跨文件设置全局变量_Python_Python 2.7_Global Variables - Fatal编程技术网

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

在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的值。然后,该值将在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_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'始终指向与最初相同的对象