字典没有为变量赋值

时间:2013-05-12 06:19:25

标签: python dictionary variable-assignment

我试图将字典中的值赋给变量,但变量保持不变。该值是另一个字典。

我在这里可以找到用于生成词典的代码: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在全局范围中定义

- 编辑 -

以下是一些示例数据:

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

2 个答案:

答案 0 :(得分: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的单独局部变量。一旦方法返回,该变量就会超出范围。

答案 1 :(得分:0)

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

全局变量的规则是,如果您写入它,则需要global关键字,但如果您只是访问变量,则不需要它(即使该访问正在改变状态)。这就是为什么我上面的建议不需要global语句,而原始代码也是如此。可能这也是“将列表分配给两个变量”并且不需要global时发生的情况。