在函数式编程中使用柯里化/柯里化函数有什么好处?

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

如果您将

inner_multiply
视为
multiply
的初始值设定项,难道您不应该让它们松散耦合并 DI 初始值设定项(或任何其他方式),尤其是当您需要多个初始值设定项时?还是我误解了 FP 中柯里化函数的基本概念?

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 design-patterns functional-programming currying
2个回答
0
投票

我认为您可以使

inner_multiply
成为
curried_multiply
的依赖项,而不是在
curried_multiply
中定义它,这样您就可以轻松更改
inner_multiply
的实现而不影响
curried_multiply


0
投票

您可以像这样定义一个完全通用的

curry
函数:

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

假设,为了重现 OP 中的示例,您还定义了一个

multiply
函数,如下所示:

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

您现在可以使用

multiply
部分应用
curry

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

这个例子直接使用了

multiply_by_3
,但好处是你不必那么做。相反,您可以在一个地方部分应用该函数,传递该部分应用的函数,然后在代码库的完全不同的部分调用它。

© www.soinside.com 2019 - 2024. All rights reserved.