我很好奇是否可以在以下情况下避免使用 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...
请您参考如下方法:
在 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) - 请注意
返回结果最后没有(),因此函数还没有被调用 - 函数在
print(f(1))中被调用,变量x的值是1 - 最后,结果函数使用
x、a、b和c返回计算值(来自square_fun(1, 2, 3))
您可以在此处找到更多信息 => https://www.learnpython.org/en/Closures
