首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字典没有为变量赋值

字典没有为变量赋值
EN

Stack Overflow用户
提问于 2013-05-12 14:19:25
回答 2查看 131关注 0票数 1

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

我用来生成字典的代码可以在这里找到:http://pastebin.com/Q2Hc8Ktp

我自己写的,没有这个问题就进行了测试。

下面是我试图从字典中复制字典的代码片段。

代码语言:javascript
复制
_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是在全局范围内定义的

-编辑-

下面是一些示例数据:

代码语言:javascript
复制
[Classes]
Wizard = Arcana, Bluff
Warrior = Endurance, Intimidate
Ranger = Nature, Perception
Bard = Heal, History
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-12 14:27:14

如果要更改全局变量_classes的值,则需要使用global

代码语言:javascript
复制
def populateClasses():
    global _classes   # <<<<<< THIS
    print "Classes Exist"
    cp = Preferences(''.join([resource_path,"resources.ini"]))
    print cp
    _classes = cp.getPreferences()['Classes']

如果不这样做,您的方法将创建一个单独的局部变量,也称为_classes。一旦你的方法返回,这个变量就会超出作用域。

票数 4
EN

Stack Overflow用户

发布于 2013-05-12 14:50:36

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16504748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档