且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

我应该在什么时候使用CURYING函数呢?

更新时间:2023-02-16 22:46:45

函数汇聚的目的是从更一般的函数中轻松获取专用函数。您可以通过在不同的时间预先设置某些参数并在以后保持其固定来实现此目的。

这与命名无关。在Python中,您可以随时轻松地重命名变量/函数。

示例:

def simple_function(a):
    def line(b=0):
        def compute(x):
            return [a+b * xi for xi in x]
        return compute
    return line

x = range(-4, 4, 1)
print('x {}'.format(list(x)))
print('constant {}'.format(simple_function(3)()(x)))
print('line {}'.format(simple_function(3)(-2)(x)))

提供

x [-4, -3, -2, -1, 0, 1, 2, 3]
constant [3, 3, 3, 3, 3, 3, 3, 3]
line [11, 9, 7, 5, 3, 1, -1, -3]

现在这还不是那么令人兴奋。它仅将f(a,b,c)类型的函数调用替换为f(a)(b)(c)类型的调用,这甚至可能被视为Python中不那么优雅的风格。

但它允许您执行以下操作:

line_through_zero = simple_function(0)
print('line through zero {}'.format(line_through_zero(1)(x))) # only slope and x

这给了

line through zero [-4, -3, -2, -1, 0, 1, 2, 3]

因此,并发的好处是您可以获得具有固定参数的专用函数,并且可以使用这些函数,而不必编写更通用的表单并在每次调用时设置固定的参数。

可以选择:partiallambdadefault parameters。因此,在实践中,仓促可能是有用的,但如果您愿意,您也可以绕过它。

另请参阅Currying in Python