![](/img/trans.png)
[英]Is this a correct way of Transforming lambda construct into a ordinary function?
[英]Transforming lambda expression to simple function
我很好奇在以下情况下是否有可能避免使用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
)。 return result
的末尾没有()
,因此该函数尚未调用 print(f(1))
被调用,变量x
取值为1
x
, a
, b
和c
(来自square_fun(1, 2, 3)
)返回计算值。 您可以在此处找到其他信息=> https://www.learnpython.org/en/Closures
您还可以使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.