使用对象列表执行方法列表

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)