2013-05-12 225 views
1

我想從字典中賦值給變量,但變量保持不變。該值是另一個字典。字典沒有賦值給變量

我用來生成字典的代碼可以在這裏找到:http://pastebin.com/Q2Hc8Ktp

我自己寫的,並測試它沒有這個問題。

這是我試圖從字典中複製字典的代碼片段。

_classes = {} 

def populateClasses(): 
    print "Classes Exist" 
    cp = Preferences(''.join([resource_path,"resources.ini"])) 
    print cp 
    _classes = cp.getPreferences()['Classes'] 

populateClasses() 
print _classes 

當我打印出來CP它顯示了正確的數據,但是當我嘗試打印_classes那隻能說明{}

注:從內部功能工作正常打印_classes但不能從功能外。 _classes是在全球範圍內

CNC中

這裏定義也有一些樣本數據:

[Classes] 
Wizard = Arcana, Bluff 
Warrior = Endurance, Intimidate 
Ranger = Nature, Perception 
Bard = Heal, History 
+0

使用'全球_classes = {} http://stackoverflow.com/questions/423379/using-global-variables-in-a-function-other-than-the-one-that-c​​reated-他們 – 2013-05-12 06:27:26

回答

4

如果你想改變全局變量_classes的價值,你需要使用global

def populateClasses(): 
    global _classes # <<<<<< THIS 
    print "Classes Exist" 
    cp = Preferences(''.join([resource_path,"resources.ini"])) 
    print cp 
    _classes = cp.getPreferences()['Classes'] 

沒有這個,你的方法創建一個單獨的局部變量也被稱爲_classes。只要您的方法返回,此變量就會超出範圍。

+0

它解決了我的問題。在另一個函數中,我將列表分配給兩個變量,而沒有在函數中聲明全局而沒有問題。不知道有什麼不同。 – RMDan 2013-05-12 06:39:10

+0

它可能是我在列表中使用append方法。 – RMDan 2013-05-12 06:48:17

0

而不是global,您可以使用_classes.update(cp.getPreferences()['Classes'])

全局變量的規則是,如果你寫入它,你需要global關鍵字,但如果你只是訪問變量(即使該訪問正在改變狀態),則不需要它。這就是爲什麼我上面的建議不需要global聲明,並且原來的代碼。可能這也是當您「將列表分配給兩個變量」並且不需要global時發生的情況。