2015-12-11 110 views
0

我是新来的python,我想简单地通过使用globals()更改变量,但出于某种原因我不断得到相同的输出(1,2,3而不是a,b,c) 。这里有什么问题?为什么globals()不工作

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 
+1

你不实际存储load_db'的'返回值的任意位置,因为你还没有打上A01,A02,A03和作为'global'内'load_db',全球范围的A01 /等不被覆盖。 (我假设你是纯粹由于学术原因而要求这个问题,并且实际上并没有像这样使用'globals()') – senshin

+3

你正在为''a01','a02'和'a03'内部的' load_db'。这并不会改变全局变量。使用返回值,例如'print load_db(a01,a02,a03,cwp,aw_sg)'。使用真正的变量名也是一个好主意,不使用'globals()'是一个更好的主意。 – Ryan

+0

@ senshin yup我用这个例子来理解它是如何工作的 – JeremyK

回答

2

您使用globals()函数访问全局变量,但你让他们分配到函数内部的局部变量,它不会改变全局变量。如果您想要更改全局变量,则可以按函数将返回的值重新分配给全局变量。

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

谢谢你的回答和解释,它工作的很棒 – JeremyK