python中的算法运算排列:测试函数执行的不同顺序

Algorithm operation permutation in python: test different order of function execution

我有一个像这样工作的算法(伪代码):

def func_1(x):  
    apply processing 1 to x 
    return x
def func_2(x):
    apply processing 2 to  x
    return x
def func_3(x):
    apply processing 3 to  x
    return x

我想编写一个函数 func_all_processing(data, execution_order) 以定义的顺序将所有这些函数应用于某些输入数据并输出处理后的数据,比如:

func_all_processing(data, [1,2,3])

会做:

processed_data = func_1(data)
processed_data = func_2(processed_data)
processed_data = func_3(processed_data)
return processed_data

func_all_processing(data, [3,1,2])

会做:

processed_data = func_3(data)
processed_data = func_1(processed_data)
processed_data = func_2(processed_data)
return processed_data

正确的做法是什么?

将函数放在一个列表中,然后将该列表传递给 func_all_processing(),循环遍历它们。

def func_all_processing(data, funcs):
    for f in funcs:
        data = f(data)
    return data

print(func_all_processing(data, [func_1, func_2, func_3]))

如果您想测试所有不同的顺序,请使用 itertools.permutations() 遍历不同的排列。

你可以这样做:

def process_all(x,process_order:list):
    data = x
    for process in process_order:
        processed_date = globals()["func_{}".format(process.__str__())](data)
        data = processed_date
    return processed_date

正如@Bamar 所指出的,我将使用函数列表并将函数封装在 func_all_processing 函数中,如下所示:

def func_all_processing(data: [int, float], order: list) -> object:
    def func_1(x):  
        apply processing 1 to x 
        return x
    def func_2(x):
        apply processing 2 to  x
        return x
    def func_3(x):
        apply processing 3 to  x
        return x
    
    func_list = [func_1, func_2, func_2]
    rslt = data
    for i in order:
        rslt = func_list[i](rslt)
    return rslt