Skip to main content
 首页 » 编程设计

python之以链的形式执行列表中的函数

2025年05月04日10Free-Thinker

在 Python 中我定义了这些函数:

def foo_1(p): return p + 1 
def foo_2(p): return p + 1 
def foo_3(p): return p + 1 
def foo_4(p): return p + 1 
def foo_5(p): return p + 1 

我想像这样在链中执行这些函数:

foo_1(foo_2(foo_3(foo_4(foo_5(1))))) 

我想将这些函数指定为一个列表,以精确的顺​​序在链中执行这些函数。这是我试过的:

lf = [Null,foo_1,foo_2,foo_3,foo_4,foo_5]  # Null is for +1 issue here 
 
def execu(lst, seq, raw_para): 
    # in some way 
 
execu(lf,(1,2,3,4,5), 1)   # = foo_1(foo_2(foo_3(foo_4(foo_5(1))))) 
execu(lf,(1,2,3), 1)       # = foo_1(foo_2(foo_3(1))) 
execu(lf,(3,3,3), 1)       # = foo_3(foo_3(foo_3(1))) 

请您参考如下方法:

您可以使用 reduce为此:

reduce(lambda x, y: y(x), list_of_functions, initial_value) 

像这样:

reduce(lambda x, y: y(x), reversed([foo_1, foo_2, foo_3, ...]), 1) 

请注意,如果您想按 foo_1(foo_2(etc...)) 的顺序应用函数,您必须确保 foo_1 是函数列表的最后一个元素。因此,我在后一个示例中使用了 reversed。