我这里有两种方法似乎不想互相交谈。我认为我使用字典的方式有点不对,我可能有点困惑:
def load(self, msg):
loadState = {'foo1' { 'FirstObject':1, 'SecondObject':2 }, 'foo2' { 'FirstObject':3, 'SecondObject':4 }}
foo_objects = loadState.keys()
for name in foo_objects:
if name == 'foo1':
ValueTuple = loadState[foo_objects[0]]
elif name == 'foo2':
ValueTuple = loadState[foo_objects[1]]
self.program.supervisor.setI2c( ValueTuple, foo = name ) #This is where I think it goes wrong
然后为了存储这些值,我将它们传递给之前正在使用的这个方法,把它放在上面的新方法上:
def setI2c( self, ValueTuple, foo=None ) :
for name in foo :
object = self.objects[name]
for name in ValueTuple :
register = reg(name)
register.value = regNameValueTuple[name]
编辑:我出错的地方:
self.program.supervisor.setI2c( ValueTuple, foo = [name] )
答案 0 :(得分:1)
您的load
消息可以简化为:
def load(self, msg):
loadState = {'foo1' { 'FirstObject':1, 'SecondObject':2 }, 'foo2' { 'FirstObject':3, 'SecondObject':4 }}
for name, value in foo_objects.iteritems():
self.program.supervisor.setI2c(value, foo=name)
此处,foo
是字符串,是loadState
中的一个键。
然后,您在foo
中循环setI2c
,其中foo
仍为字符串。这意味着你正在迭代各个角色:
>>> foo = 'foo1'
>>> for name in foo:
... print name
...
f
o
o
1
根本不需要那个循环,你很可能想要这个:
def setI2c(self, value_dict, foo=None):
object = self.objects[foo]
for name in value_dict:
register = reg(name)
register.value = regNameValueTuple[name]
但您实际上并未在代码中的任何位置使用object
,因此可以完全删除该行。
如果setI2c()
始终希望foo
成为名称列表,那么您应该在load
中传递一个列表:
self.program.supervisor.setI2c(value, foo=[name])