带功能的返回功能

时间:2015-02-04 15:52:21

标签: python function return

我想做以下事情:

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

我的语法无效。什么是Pythonic /正确的方法呢?

通过这种方式,我可以拨打f(x),而无需致电f(x,params),这是一个稍微混乱的IMO。

3 个答案:

答案 0 :(得分:7)

lambda表达式是创建函数的一种非常有限的方式,你不能有多行/表达式(每the tutorial“它们在语法上限于一个表达式” )。但是,您可以嵌套标准函数def initions:

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

函数是Python中的第一类对象,因此一旦定义,您可以使用to_return创建的函数尽可能地传递lambda,无论哪种方式,它们都可以访问“闭包”变量(参见例如Why aren't python nested functions called closures?)。

答案 1 :(得分:4)

看起来您实际上要做的是partial function applicationfunctools为其提供了解决方案。例如,如果您有一个函数multiply()

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

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

from functools import partial

double = partial(multiply, 2)

......按预期工作:

>>> double(7)
14

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

答案 2 :(得分:1)

你在Python中不能有多行lambda表达式,但是你可以返回一个lambda或一个完整的函数:

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

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