Python 为什么globals()不';行不通
我是python新手,我想通过使用globals()简单地更改变量,但出于某种原因,我一直得到相同的输出(1、2、3,而不是a、b、c)。这里怎么了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
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是的,我用这个例子来了解它是如何工作的