Python中的柯里化,你会用吗

B站影视 2025-02-09 16:31 3

摘要:因此,通过局部套用,可以将一个函数转换为多个单参数函数。它对于代码的可重用性和函数式编程非常有用。事实上,将其添加到 python 语言中的提案(PEP 309,被拒绝)来自我们的函数式编程大师 Haskell。Haskell 和 ML 等语言中的函数应用程序

柯里化是指不是一次给函数所有参数,而是一个一个地给它们。因此,它为每个参数创建了一个新函数。让看一下 python 中的快速手动实现

def add_curried(x): def inner(y): return x + y return inner# Usageadd_five = add_curried(5) # Now adds 5 to any numberresult = add_five(3) # result will be 8

因此,通过局部套用,可以将一个函数转换为多个单参数函数。它对于代码的可重用性和函数式编程非常有用。事实上,将其添加到 python 语言中的提案(PEP 309,被拒绝)来自我们的函数式编程大师 Haskell。Haskell 和 ML 等语言中的函数应用程序的工作原理是,函数调用:

f x y z

实际上意味着:

(((f x) y) z)

因此,虽然这个实现被拒绝了,但仍然可以通过一些方法在 python 中实现它。您看到了上面的手动实现,其他实现方式是使用 lambda 函数、装饰器和functools.partial 函数。带有 partial 的相同示例如下所示:

from functools import partialdef add(x, y): return x + yadd_five = partial(add, 5) result = add_five(3)

这在现实世界中很有用,您可以在其中创建一个函数来修复一些参数 (level),同时仍然允许动态输入 (message),同时自动添加时间戳

但请记住,这不是递归(是的,我想到了它)。递归是指函数直接或间接地调用自身。而局部套用会创建一个函数链。

来源:自由坦荡的湖泊AI

相关推荐