使用对象列表执行方法列表
Executing a list of methods with list of objects
我有一个相同class的对象列表,想一个一个执行一个方法列表。
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)
好吧......它有效,但我用这个解决方案胃痛。
有更好的方法吗?
问候,
zonk
不那么脏了,但还是不够好
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" 循环功能,并且还为每个对象重新定义了你的方法(这里没有必要,因为所有对象都是相同的 class;但仍然好的做法)
您的解决方法 不 有效,它只会调用 first 元素。由于 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
和*returns 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)
我有一个相同class的对象列表,想一个一个执行一个方法列表。
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)
好吧......它有效,但我用这个解决方案胃痛。
有更好的方法吗?
问候,
zonk
不那么脏了,但还是不够好
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" 循环功能,并且还为每个对象重新定义了你的方法(这里没有必要,因为所有对象都是相同的 class;但仍然好的做法)
您的解决方法 不 有效,它只会调用 first 元素。由于 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
和*returns 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)