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 在全局范围内定义

-编辑-

这里还有一些示例数据:

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

2 回答 2

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. 一旦您的方法返回,此变量就会超出范围。

于 2013-05-12T06:27:14.277 回答
0

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

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

于 2013-05-12T06:50:36.497 回答