我很好奇在以下情况下是否可以避免使用lambda表达式。
例如,使用lambda表达式,我可以简单地定义一个返回lambda exp的函数。
def square_fun(a,b,c):
return lambda x: a*x**2 + b*x + c
之后我们可以使用:
f = square_fun(1,2,3)
f(1) # here x = 1
如何避免lambda表达而获得相同的行为?
例如,square_fun必须返回另一个函数
def square_fun(a,b,c):
return f...
答案 0 :(得分:7)
在python中,您可以在另一个函数中定义一个函数,因此以下代码段应具有相同的行为:
def square_fun(a, b, c):
def result(x):
return a*x**2 + b*x + c
return result
f = square_fun(1, 2, 3)
print(f(1))
# Should print 6
所以,我将尝试解释这里发生的事情:
f = square_fun(1, 2, 3)
行中,f
实际上将映射到内部函数(也称为result
)return result
末尾没有()
,因此该函数尚未调用print(f(1))
中被调用,变量x
以1
作为其值x
,a
,b
和c
(来自square_fun(1, 2, 3)
)返回计算值您可以在此处找到更多信息=> https://www.learnpython.org/en/Closures
答案 1 :(得分:4)
您也可以使用functools.partial:
from functools import partial
def square_fun(x, a, b, c):
return a * x ** 2 + b * x + c
f = partial(square_fun, a=1, b=2, c=3)
print(f(1))
# should print 6