相关疑难解决方法(0)

我什么时候应该在Python中使用函数currying?

什么时候应该以咖喱形式写我的功能?不符合我的想法,需要纠正自己.

作为我学习链接的一部分,这是我从函数currying中理解的.以下是一个例子:

def curry2(f):
    """Returns a function g such that g(x)(y) == f(x, y)

    >>> from operator import add
    >>> add_three = curry2(add)(3)
    >>> add_three(4)
    """
    def g(x):
        def h(y):
            return f(x, y)
        return h
    return g
Run Code Online (Sandbox Code Playgroud)

在任何应用程序中,如果我知道参数的数量是固定的(比如2个参数)而函数名称是normalise_range(比如说),那么我将定义def normalise_range(x, y):函数并直接通过调用在我的应用程序中使用它normalise_range(x, y).

在任何应用程序中,如果我知道,参数的数量是固定的(比如2个参数),但函数名称是变化的(可以是normalise_range/ average/我不知道..),那么我将使用def curry2(f):如上所示,将接受所有带有两个参数的函数(固定).

我的问题:

  1. 我的理解是否正确?
  2. 如果是,我们可以考虑为可变数量的参数的函数进行求解吗?

python functional-programming

6
推荐指数
2
解决办法
2万
查看次数

高阶和​​curried函数之间的区别

我正在阅读一本书,使用F#进行功能编程,其中说明(第33页),在高阶函数声明部分

我们已经看到了高阶内置函数,如(+)和(<<)

在本节结尾处

也可以通过在let-declaration中提供如下参数来定义高阶函数:

let weight ro s = ro * s ** 3.0;;
Run Code Online (Sandbox Code Playgroud)

然而,我在今天早些时候提出的一个问题的底部有一些有用的评论(最初的标题是"我什么时候应该把我的函数写成更高阶函数"),似乎对这些例子是否实际上更高有疑问 -订单功能.

高阶函数的维基百科的定义是:

高阶函数(也是函数形式,函数或函子)是至少执行以下操作之一的函数:(i)将一个或多个函数作为输入; (ii)输出一项功能.

一方面,我可以看到函数类似(+),并且weight可能被视为高阶函数,因为给定一个参数它们返回一个函数.另一方面,我可以看到它们被恰当地视为咖喱功能.我正在学习F#作为一个自学项目,并希望明确这些概念,因此本网站的答案和讨论特别有用.

我的问题是,这些功能的正确用语是什么,也许更重要的是,人们通常如何使用"高阶函数"和"咖喱函数"这两个术语?

f# functional-programming currying functor higher-order-functions

5
推荐指数
2
解决办法
500
查看次数