我想将一些函数调用为单个值并返回集合结果。

class Foo:
    def __init__(self, i):
        self.i = i

    def get(self):
        return self.fn1(self.fn2(self.i)) #200

    def fn1(self, i):
        return i + i #10+10 = 20

    def fn2(self, i):
        return i * i #20*20 = 200

    #...

foo = Foo(10)
print(foo.get())

有没有更优雅的方式或模式?

最佳答案

通常,如上所述的嵌套函数是用Python编写函数的最直接和可读的方法。
如果您正在编写许多函数,那么编写一个compose函数可能是值得的。

def compose(*funcs):
    if len(funcs) == 1:
        return funcs[0]
    else:
        def composition(*args, **kwargs):
            return funcs[0](compose(*funcs[1:])(*args, **kwargs))
        return composition

或者,如果您喜欢迭代而不是递归解决方案:
def compose_pair(f1, f2):
    def composition(*args, **kwargs):
        return f1(f2(*args, **kwargs))
    return composition

def compose_iterative(*funcs):
    iterfuncs = iter(funcs)
    comp = next(iterfuncs)
    for f in iterfuncs:
        comp = compose_pair(comp, f)
    return comp

08-24 21:12