对不起,如果这是一个愚蠢的问题,我很难想到另一个简单的方法。
我的代码(相关位):
import file2
sliderData = [{'name': 'Number of mountains', 'variable': file2.NUMMOUNTAINS},
{'name': 'Number of trees', 'variable': file2.NUMTREES}
for i in range(len(self.sliders)): # self.sliders is a list of Slider() objects
self.sliderData[i]['variable'] = self.sliders[i].update() # update() returns an int
print int(file2.NUMMOUNTAINS)
我无法弄清楚如何更新sliderData[i]['variable']
中存储的变量(即更改file2.NUMMOUNTAINS
本身)。它似乎只是改变了存储在字典中的值。
有什么想法吗?
答案 0 :(得分:1)
假设file2.NUMMOUNTAINS
是int
或float
,请注意这两种类型都是不可变,即无法就地更改。
因此,当您将self.sliders[i].update()
返回的值分配给self.sliderData[i]['variable']
时,此不会更改file2.NUMMOUNTAIN
,而是将字典引用分配给一个不同的对象。
显示此内容的最小示例:
>>> d = {'a': 1}
>>> id(d['a'])
1751629384
>>> d['a'] += 1
>>> d
{'a': 2}
>>> id(d['a'])
1751629400 # different 'id' means different object
您必须明确更改属性的值,例如
file2.NUMMOUNTAIN = self.sliderData[0]['variable']
答案 1 :(得分:1)
您应该向file2添加某种方法来进行更新,因为您在该代码中执行的操作是更改字典中的键值(#39;变量')。 / p>
例如,您可以在file2中拥有一个接收键名和值的方法,然后更改您想要更改的实际值
class File2:
def __init__(self):
self.NUMMOUNTAINS = 0
self.NUMTREES = 0
pass
def setValue(self, key, value):
if key == 'Number of mountains':
self.NUMMOUNTAINS = value
elif key == 'Number of trees':
self.NUMMTREES = value
然后在您的实际代码中:
for i in range(len(self.sliders)): # self.sliders is a list of Slider() objects
file2.setValue(self.sliderData[i]['name'], self.sliders[i].update()) # update() returns an int
无论如何,这是一个糟糕的结构,如果你需要扩展它(比如在字典中有更多的元素),它会很难并且容易出错。
答案 2 :(得分:-1)
似乎file2.NUMMOUNTAINS
是int
因此,在字典中,您可以获得file2.NUMMOUNTAINS
的值副本 - 而不是引用变量file2.NUMMOUNTAINS
self.sliderData[i]['variable']
和file2.NUMMOUNTAINS
是独立变量。
当您更改self.sliderData[i]['variable']
时,它不会更改file2.NUMMOUNTAINS
当您更改file2.NUMMOUNTAINS
时,它不会更改self.sliderData[i]['variable']
。