将函数作为参数发送到另一个函数

时间:2016-10-19 21:22:00

标签: python

我遇到过这样的逻辑:

def f2(f):
  def g(arg):
      return 2 * f(arg)
  return g

def f1(arg):
    return arg + 1

f_2 = f2(f1)
print f_2(3)

乍一看,这似乎是一个非常简单的代码。 但需要一些时间来弄清楚这里发生了什么。 将函数作为参数发送给另一个函数对我来说是不寻常的。 虽然它有效,但我想知道是否应该避免使用这样的技术(因为它起初看起来确实很混乱)。

1 个答案:

答案 0 :(得分:2)

将函数传递给其他函数是所谓的函数式编程语言中常见的习惯用语,如LISP,Scheme,Haskell等.Python有时被称为"多范式语言"因为它具有函数式语言的一些特性(以及命令式/结构化和面向对象的语言)。

因此,虽然它被认为是一种先进的技术,但在Python中看到它并不罕见。 Python甚至还有一个语言关键字(lambda),可让您定义简短的匿名函数" in line"在调用函数时,您不必给它们一个名称并在别处定义它们。它还具有内置函数,如mapfilterreduce,它们明确地设计用于处理传递给它们的函数;这些是从上述功能语言中借用的。一个常用的语言特性装饰器,基本上是一个函数,它接受一个函数并返回一个函数。