这里有初学者问题。我正在尝试使用字典通过函数修改全局变量。示例代码:
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
我理解结果,但我想知道是否有任何方法可以访问和更改全局变量,因此最后一行中的count
会60
而不是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应该访问和修改特定变量。
对于第二个答案,它不会起作用,因为它不再是本地的。
答案 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是局部变量,而不是全局变量。你只是处于最高范围,所以这是一个没有区别的区别。获得符号表后,您可以像任何列表一样分配它。