python – 使用具有多个参数的函数并返回具有单个元组参数的函数的函数

是否有一个高阶函数的标准名称,它接受一个带有多个参数的函数并返回一个带有单个元组参数的函数:

def what_am_i(f):
    def f1(tup):
        f(*tup)
    return f1 

这与大多数编程语言中的不兼容不同,我通常将其定义为:

def uncurry(f):
    def f1(a, b):
        return f(a)(b)
    return f1

最佳答案 应用()

在JavaScript中,这称为apply()

'use strict'

function test(a, b, c) {
  // context
  console.log(this)
  // arguments
  console.log(a)
  console.log(b)
  console.log(c)
}

// first parameter is the context
test.apply('this', ['a', 'b', 'c'])

不幸的是,第一个参数往往会在很多情况下使函数调用变得混乱,因为它不重要,因此你会传递一个像null或undefined这样的值,但在某些边缘情况下它可能非常有用.

在您只想指定数组的情况下,您可以实现一个与您的示例等效的包装函数,如下所示:

function test(a, b, c) {
  // arguments
  console.log(a)
  console.log(b)
  console.log(c)
}

// what am I? I am `apply()`
function apply(f) {
  return function (tup) {
    return f.apply(this, tup)
  }
}

var applied = apply(test)

applied(['a', 'b', 'c'])

传播()

您可以做的另一个论点是将其称为spread(),因为spread syntax做了同样的事情:

function test(a, b, c) {
  console.log(a)
  console.log(b)
  console.log(c)
}

test(...['a', 'b', 'c'])

你可以实现一个非常直观的包装函数,如下所示:

function test(a, b, c) {
  console.log(a)
  console.log(b)
  console.log(c)
}

// what am I? I am `spread()`
function spread(f) {
  return function (tup) {
    return f(...tup)
  }
}

var spreaded = spread(test)

spreaded(['a', 'b', 'c'])
点赞