Python第一类函数的后续应用:是否比嵌套更干净?

Python第一类函数的后续应用:是否比嵌套更干净?,python,function-pointers,Python,Function Pointers,我正在使用一个示例来帮助我学习如何在Python中使用一流函数。总的来说,我对我提出的解决方案很满意,除了有一行代码对我大喊“非Pythonic” 所以我正在处理的问题被定义了。这个谜题寻求六个简单函数的单一排列(720个可能的排列),其中包含“2”,最终返回-3 这是我的解决方案,它简单地转储所有可能的六函数置换及其结果 def perform (fun, arg): return fun(arg) def a(n): return n + 2 def d(n):

我正在使用一个示例来帮助我学习如何在Python中使用一流函数。总的来说,我对我提出的解决方案很满意,除了有一行代码对我大喊“非Pythonic”

所以我正在处理的问题被定义了。这个谜题寻求六个简单函数的单一排列(720个可能的排列),其中包含“2”,最终返回-3

这是我的解决方案,它简单地转储所有可能的六函数置换及其结果

def perform (fun, arg):
    return fun(arg)

def a(n):
    return n + 2

def d(n):
    return n / 2.

def m(n):
    return n * 2

def p(n):
    return n ** 2

def r(n):
    return n ** 0.5

def s(n):
    return n - 2

if __name__ == "__main__":
    from itertools import permutations

    for i, perm in enumerate(permutations([a, d, m, p, r, s])):
        try:
            k = perform(perm[5], perform(perm[4], perform(perm[3], perform(perm[2], perform(perm[1], perform(perm[0], 0))))))
        except ValueError:
            k = float('nan')

        print "%03d. %s: %8.8f" % (i + 1, ''.join([x.__name__ for x in perm]), k)
在我看来不正确的一行是嵌套的
perform
调用:
k=perform(…perform(。。。(
。我需要做的是将置换元组中的第一个函数应用于0,然后将该函数的结果应用于元组中的第二个函数,然后通过置换元组依次应用,直到得出应用组件函数的最终结果

有没有一种更干净的方法可以将
perm
中的函数依次应用于相应的结果,从0开始作为参数?我曾经玩弄过
map
和递归,但我还没有找到比上面更优雅的解决方案。

为什么不简单:

x = init value
for f in funclist:
    x = f(x)
或者以一种更奇特的方式:

value = reduce(lambda x, f: f(x), funclist, init_value)
为什么不简单地:

x = init value
for f in funclist:
    x = f(x)
或者以一种更奇特的方式:

value = reduce(lambda x, f: f(x), funclist, init_value)

作为一个风格点,迭代版本可能被认为更具python风格。作为一个风格点,迭代版本可能被认为更具python风格。