我无法理解以下功能。
def make_adder(n):
return lambda x: x + n
plus_2 = make_adder(2)
plus_2(5)
>>> 7
在此函数中,x表示什么,并且由于x未定义,这怎么不会导致错误?
答案 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()
的任何值。