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").但是,您可以嵌套标准函数 def
initions:
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
对象,而不是一个函数,但它的行为方式相同。
我想做如下事情:
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").但是,您可以嵌套标准函数 def
initions:
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
对象,而不是一个函数,但它的行为方式相同。