在函数式编程中使用咖喱/咖喱函数有什么好处?

What is the benefit of using curried/currying function in Functional programming?

提问人:Tando 提问时间:4/29/2023 最后编辑:Tando 更新时间:4/29/2023 访问量:107

问:

如果您考虑作为 的初始值设定项,您不应该使它们松散耦合并 DI 初始值设定项(或任何其他方式),尤其是当您需要多个初始值设定项时?还是我误解了 FP 中咖喱函数的基本概念?inner_multiplymultiply

def inner_multiply(x):
    def multiply(y):
        return x * y
    return multiply

def curried_multiply(x):
    return inner_multiply(x)

multiply_by_3 = curried_multiply(3)
result = multiply_by_3(5)
print(result)  # Output: 15 (3 * 5)
python 依赖注入 编程 原理 咖喱

评论

0赞 chepner 4/29/2023
不要将其视为初始值设定项。从概念上讲,它返回一个预定义的函数,该函数是根据 的值选择的。在实践中,此类函数不是预定义的,而是使用闭包按需生成的。inner_multiplyx

答:

5赞 Mark Seemann 4/29/2023 #1

您可以定义一个完全泛型的函数,如下所示:curry

def curry(f):
    return lambda x: lambda y: f(x, y)

假设,为了在 OP 中重现示例,您还定义了一个如下所示的函数:multiply

def multiply(x, y):
    return x * y

您现在可以使用以下命令部分申请:multiplycurry

>>> multiply_by_3 = curry(multiply)(3)
>>> multiply_by_3(5)
15

此示例立即使用 ,但好处是您不必这样做。相反,您可以在一个地方部分应用函数,传递部分应用的函数,并在代码库的完全不同部分调用它。multiply_by_3