将Lambda表达式转换为简单函数

时间:2019-04-23 01:16:34

标签: python python-3.x lambda

我很好奇在以下情况下是否可以避免使用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...

2 个答案:

答案 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

所以,我将尝试解释这里发生的事情:

  1. f = square_fun(1, 2, 3)行中,f实际上将映射到内部函数(也称为result
  2. 请注意,return result末尾没有(),因此该函数尚未调用
  3. 该函数在print(f(1))中被调用,变量x1作为其值
  4. 最后,结果函数使用xabc(来自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