如果您将
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)
我认为您可以使
inner_multiply
成为curried_multiply
的依赖项,而不是在curried_multiply
中定义它,这样您就可以轻松更改inner_multiply
的实现而不影响curried_multiply
。
您可以像这样定义一个完全通用的
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
,但好处是你不必那么做。相反,您可以在一个地方部分应用该函数,传递该部分应用的函数,然后在代码库的完全不同的部分调用它。