2013-05-12 80 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时发生的情况。