我遇到过这样的逻辑:
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)
乍一看,这似乎是一个非常简单的代码。 但需要一些时间来弄清楚这里发生了什么。 将函数作为参数发送给另一个函数对我来说是不寻常的。 虽然它有效,但我想知道是否应该避免使用这样的技术(因为它起初看起来确实很混乱)。
答案 0 :(得分:2)
将函数传递给其他函数是所谓的函数式编程语言中常见的习惯用语,如LISP,Scheme,Haskell等.Python有时被称为"多范式语言"因为它具有函数式语言的一些特性(以及命令式/结构化和面向对象的语言)。
因此,虽然它被认为是一种先进的技术,但在Python中看到它并不罕见。 Python甚至还有一个语言关键字(lambda
),可让您定义简短的匿名函数" in line"在调用函数时,您不必给它们一个名称并在别处定义它们。它还具有内置函数,如map
,filter
和reduce
,它们明确地设计用于处理传递给它们的函数;这些是从上述功能语言中借用的。一个常用的语言特性装饰器,基本上是一个函数,它接受一个函数并返回一个函数。