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)
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,但好处是您不必这样做。相反,您可以在一个位置部分应用该函数,传递该部分应用的函数,然后在代码库的完全不同的部分中调用它。
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |