在列表中按链式执行函数

5 投票
3 回答
2580 浏览
提问于 2025-04-16 06:05

在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)))

3 个回答

5

在“lf”中不需要“Null”。

def execu(lst, seq, raw_para):  
    para = raw_para  
    for i in reversed(seq):  
        para = lst[i](para)
    return para
9

你可以使用 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(等等...)) 的顺序来应用这些函数,你需要确保 foo_1 是函数列表中的最后一个元素。所以在后面的例子中,我使用了 reversed

3

当然可以!请看下面的内容:

在编程中,有时候我们需要让程序做一些事情,比如计算、显示信息或者处理数据。为了让程序能够理解我们的指令,我们需要用一种特定的语言来告诉它们该怎么做。这种语言就是编程语言。

编程语言就像我们日常生活中的语言一样,但它们有自己的规则和语法。就像我们说话时需要遵循语法规则一样,编程语言也有自己的写法。如果写错了,程序就会无法理解我们的意思,甚至会报错。

在编程的过程中,我们常常会遇到一些问题,比如代码运行不正常或者出现错误。这时候,我们需要仔细检查代码,看看哪里出了问题。通常,错误可能是因为拼写错误、缺少符号或者逻辑不正确。

另外,编程还需要我们有耐心和细心,因为有时候一个小小的错误就会导致整个程序无法运行。通过不断练习和学习,我们可以逐渐掌握编程的技巧,写出更好的代码。

希望这些简单的解释能帮助你更好地理解编程的基本概念!

def execu(lst, seq, raw_para):
  return reduce(lambda x, y: y(x), reversed(operator.itemgetter(*seq)(lst)), raw_para)

撰写回答