Return 函数与函数

Return function with function

我想做如下事情:

def getFunction(params):
   f= lambda x:
       do stuff with params and x
   return f

我得到的语法无效。 Pythonic/correct 的方法是什么?

这样我就可以调用 f(x) 而不必调用 f(x,params),这在我看来有点混乱。

lambda 表达式是创建函数的一种非常有限的方式,不能有多个 lines/expressions(每个 the tutorial"They are syntactically restricted to a single expression").但是,您可以嵌套标准函数 definitions:

def getFunction(params):
   def to_return(x):
       # do stuff with params and x
   return to_return

函数是 Python 中的第一个 class 对象,因此一旦定义,您就可以像使用 lambda 创建的函数一样传递 to_return,并且无论哪种方式,他们都可以访问 "closure" 变量(参见 Why aren't python nested functions called closures?)。

Python 中不能有多行 lambda 表达式,但可以 return lambda 或完整函数:

def get_function1(x):
    f = lambda y: x + y
    return f

def get_function2(x):
    def f(y):
        return x + y
    return f

看起来您实际上想做的是 partial function application, for which functools 提供解决方案。例如,如果您有函数 multiply():

def multiply(a, b):
    return a * b

... 然后您可以创建一个 double() 函数 1,其中一个参数预先填充如下:

from functools import partial

double = partial(multiply, 2)

... 按预期工作:

>>> double(7)
14

1 从技术上讲是一个 partial 对象,而不是一个函数,但它的行为方式相同。