我有一个同一个类的对象列表,想要逐个执行方法列表。
F.e。
objectlist = [ obj1, obj2, obj3, ...]
methodlist = [ obj(?).returnstring(para1), obj(?).returnint(para2,subpara1), ...]
for i in range(len(objectlist)):
for n in range(len(methodlist)):
value = obj[i].methodlist[n]
print(value)
我只是有这个肮脏的解决方法:
objectlist = [ obj1, obj2, obj3, ...]
i = 0
methodlist = [ objectlist[i].returnstring(para1), objectlist[i].returnint(para2,subpara1), ...]
for i in range(len(objectlist)):
for n in range(len(methodlist)):
value = obj[i].methodlist[n]
print(value)
嗯......它有效,但我对此解决方案感到肚子痛。
有更好的方法吗?
映入眼帘,
使...非常吃惊
答案 0 :(得分:2)
您的解决方法不工作,它只会调用第一个元素。自i = 0
起,它会立即评估。
您可以使用 lambda-expressions :
objectlist = [ obj1, obj2, obj3, ...]
methodlist = [lambda obj:obj.returnstring(para1), lambda obj:obj.returnint(para2,subpara1), ...]
所以这里methodlist
包含一个表格的lambda表达式列表:
lambda obj:obj.returnstring(para1)
lambda表达式是匿名函数,它将参数obj
作为输入,并在该对象上返回obj.returnstring(para1)
。因此,它或多或少等同于:
def afunction(obj):
return obj.returnstring(para1)
现在,您可以简单地遍历对象和方法列表,并使用参数调用lambda表达式并对结果执行某些操作。像:
for i in range(len(objectlist)):
for n in range(len(methodlist)):
value = methodlist[n](obj[i])
print(value)
但更优雅的是立即循环遍历您的元素,如:
for obji in objectlist:
for methn in methodlist:
value = methn(obji)
print(value)
答案 1 :(得分:0)
有点脏,但仍然不是很好
objectlist = [ obj1, obj2, obj3, ...]
i = 0
for m_obj in objectlist:
i=i+1
methodlist = [ objectlist[i].returnstring(para1), objectlist[i].returnint(para2,subpara1), ...]
for m_method in methodlist:
value = m_obj.m_method()
print(value)
这使用了python" nice"循环功能,并为每个对象重新定义你的方法(这里不需要,因为所有的obji属于同一类;但仍然是良好的实践)