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

And*_*ndo 3 python functional-programming dependency-injection currying solid-principles

如果您考虑将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)
Run Code Online (Sandbox Code Playgroud)

Mar*_*ann 5

curry您可以像这样定义一个完全通用的函数:

def curry(f):
    return lambda x: lambda y: f(x, y)
Run Code Online (Sandbox Code Playgroud)

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

def multiply(x, y):
    return x * y
Run Code Online (Sandbox Code Playgroud)

您现在可以multiply使用以下方式部分申请curry

>>> multiply_by_3 = curry(multiply)(3)
>>> multiply_by_3(5)
15
Run Code Online (Sandbox Code Playgroud)

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