Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.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 为什么globals()不';行不通_Python_Python 2.7_Globals - Fatal编程技术网

Python 为什么globals()不';行不通

Python 为什么globals()不';行不通,python,python-2.7,globals,Python,Python 2.7,Globals,我是python新手,我想通过使用globals()简单地更改变量,但出于某种原因,我一直得到相同的输出(1、2、3,而不是a、b、c)。这里怎么了 cwp = "01" aw_sg = "01" a01 = 1 a02 = 2 a03 = 3 p01g01a01 = "a" p01g01a02 = "b" p01g01a03 = "c" print a01, a02, a03 def load_db(a01, a02, a03, cwp, aw_sg): a01 = glo

我是python新手,我想通过使用globals()简单地更改变量,但出于某种原因,我一直得到相同的输出(1、2、3,而不是a、b、c)。这里怎么了

cwp = "01"
aw_sg = "01"

a01 = 1
a02 = 2
a03 = 3

p01g01a01 = "a"
p01g01a02 = "b"
p01g01a03 = "c"

print a01, a02, a03


def load_db(a01, a02, a03, cwp, aw_sg):

    a01 = globals()["p%sg%sa01" % (cwp, aw_sg)]
    a02 = globals()["p%sg%sa02" % (cwp, aw_sg)]
    a03 = globals()["p%sg%sa03" % (cwp, aw_sg)]

    return a01, a02, a03

load_db(a01, a02, a03, cwp, aw_sg)

print a01, a02, a03
您使用了
globals()
函数来访问全局变量,但您已将它们分配给函数中的局部变量,并且它不会更改全局变量。如果要更改全局变量,可以通过函数将返回的值重新指定给全局变量

a01, a02, a03 = load_db(a01, a02, a03, cwp, aw_sg)
print a01, a02, a03

实际上,您没有将
load\u db
的返回值存储在任何位置,并且由于您没有在
load\u db
内将a01、a02和a03标记为
global
,因此不会覆盖全局范围a01/etc。(我假设您问这个问题纯粹是出于学术原因,实际上并没有像这样随意使用
globals()
)。您正在为名为
a01
a02
a03
的局部变量赋值
load\u db
。这不会改变全局变量。使用返回值,例如
打印负载\u db(a01、a02、a03、cwp、aw\u sg)
。使用实数变量名也是一个好主意,而不使用
globals()
则是一个更好的主意。@senshin是的,我用这个例子来了解它是如何工作的