Lambda表达式中的未定义变量

时间:2019-04-09 21:15:47

标签: python python-3.x function lambda

我无法理解以下功能。

def make_adder(n):
    return lambda x: x + n

plus_2 = make_adder(2)

plus_2(5)
>>> 7

在此函数中,x表示什么,并且由于x未定义,这怎么不会导致错误?

4 个答案:

答案 0 :(得分:1)

您正在定义一个函数,给定n,该函数将返回一个函数,该函数接受参数x并返回x + n。这称为高阶函数。它不会产生错误,因为您要显式返回另一个需要参数的函数。

答案 1 :(得分:1)

x表示lambda表达式接收的参数,这就是为什么它在“:”之前。

调用plus_2 = make_adder(2)时,lambda表达式将n替换为函数(2)的参数,因此现在plus_2等于lambda x: x + 2。当您调用plus_2(5)时,将对lambda表达式求值,将x替换为函数参数(5),结果为5 + 2 = 7;

答案 2 :(得分:0)

Lambda函数很棒。它们使您可以内联定义高阶函数。常规格式为lambda args: expression。在这种情况下,x是传递给lambda函数的参数。由于make_adder返回一个lambda函数,因此您传递给make_adder的任何内容都将设置为n。因此,当您传入make_adder(2)时,您会得到一个lambda函数,该函数将参数({{1)}加2。

分解原始代码段:

x

从头开始:

def make_adder(n):
    return lambda x: x + n

plus_2 = make_adder(2)  # returns lambda x: x + 2

plus_2(5)  # executes lambda expression, x + 2 with x=5

答案 3 :(得分:0)

在下面的行中:

plus_2 = make_adder(2)

我们正在将整数对象2绑定到n

之后,使用参数调用plus_2时:

plus_2(5)

执行5表达式时,整数对象x将绑定到lambda

这是运行时执行流程。由于在整个过程中没有模棱两可或没有错误,因此程序可以正常运行并输出7

现在,要回答您的问题:变量x代表根据您的命名传递给plus_2()的任何值。