通过字典(python)更改全局变量

时间:2015-11-17 19:56:54

标签: python variables dictionary

这里有初学者问题。我正在尝试使用字典通过函数修改全局变量。示例代码:

count = 0
sample = {'a' : [False, count, 20], 'b' : [False, count, 60]}

d = raw_input('give dict key: ')
    for each in sample:
        if each == d:
            sample[each][0] = True
        sample[each][1] += sample[each][2]

print('count ' + str(count))
print(sample) 
print('count ' + str(count))

结果是(毫不奇怪):

give dict key: b
count 0
{'a': [False, 0, 20], 'b': [True, 60, 60]}
count 0

我理解结果,但我想知道是否有任何方法可以访问和更改全局变量,因此最后一行中的count60而不是0 。 (最好用简单的方法,OOP目前无法实现)。

编辑: 谢谢你的答案!我不够精确,建议的解决方案不适用于我的情况。上面的陈述是一个更大的函数的一部分,还有更多的变量,让我们尝试重新定义它:

countOne = 0
countTwo = 0

sample = {'a' : [False, countOne, 20, 'mouse'], 'b' : [False, countTwo, 60, 'cat']}



def someFunction():
    global countOne, countTwo
    while something:
        if somethingElse:
            if anotherThing:
                d = raw_input('give dict key: ')
                for each in sample:
                    if each == d:
                        sample[each][0] = True
                        sample[each][1] += sample[each][2]

print('count ' + str(count))
print(sample) 
print('count ' + str(count))

我很抱歉混淆,没想到缩短它,会允许其他方法适用。

对于第一个答案,它不起作用,因为在我的字典中我有很多全局变量(超过上面的那两个)并且根据raw_input应该访问和修改特定变量。

对于第二个答案,它不会起作用,因为它不再是本地的。

1 个答案:

答案 0 :(得分:0)

好的,一个假设。我假设你不提前知道你要修改哪个变量。

如果这是准确的,以下将做你想要的:

count = 0
sample = {'a' : [False, 'count', 20], 'b' : [False, 'count', 60]}

d = input('give dict key: ')
print('count ' + str(count))
for each in sample:
    if each == d:
        sample[each][0] = True
        locals()[sample[each][1]] += sample[each][2]


print(sample) 
print('count ' + str(count))

收率:

give dict key: b
count 0
{'a': [False, 'count', 20], 'b': [True, 'count', 60]}
count 60

请注意,我将每个列表中的第二个条目更改为字符串,因此在字典创建时不会对其进行解释。

locals()将返回本地符号表的列表。请注意,在此上下文中,count是局部变量,而不是全局变量。你只是处于最高范围,所以这是一个没有区别的区别。获得符号表后,您可以像任何列表一样分配它。