2015-12-11 146 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