如何在Python中制作n阶可调用函数

问题描述 投票:0回答:1

您有以下代码:

def f(val):
    return lambda x: x + val

assert f(5)(6) == 11

这可行,但是如何才能实现这个 n 阶呢?

assert f(5)(6)(7)...(n) == sum of values

我怎样才能做到这一点?

python-3.x recursion lambda functional-programming assert
1个回答
-1
投票

要创建一个可以以所需行为调用 n 次的可调用函数,您可以使用自定义可调用对象(具有 call 方法的类)。以下是实现这一目标的方法:

class NCallableFunc:
    def __init__(self, func, val):
        self.x = val
        self.f = val

    def __call__(self, x):
        self.f = self.f(x)
        return NCallableFunc(self.f)

    def NFunc(self):
        return self.f

def test(x):
    return NCallableFunc(lambda y: x + y)

# Testing
result = test(5)(6)(7)(8)(9)  # You can chain as many calls as you want
print(result.NFunc())
© www.soinside.com 2019 - 2024. All rights reserved.