我试图将字典中的值赋给变量,但变量保持不变。该值是另一个字典。
我在这里可以找到用于生成词典的代码: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
答案 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
时发生的情况。