Python Lambda函数在这段代码中是如何工作的?
我在一个网站上学习Python,他们提到了解释lambda函数的代码行Python Lambda函数在这段代码中是如何工作的?,python,lambda,Python,Lambda,我在一个网站上学习Python,他们提到了解释lambda函数的代码行 def first_number(n): return lambda first : first * n second_num = first_number(2) print(second_num(20)) 产量是40 为什么代码会打印40以及变量“first”和“n”将取什么值,请任何人解释一下。仅简单解释一下该代码在您的情况下是如何工作的: 将第一个编号(2)分配给此行的第二个编号时: second
def first_number(n):
return lambda first : first * n
second_num = first_number(2)
print(second_num(20))
产量是40
为什么代码会打印40以及变量“first”和“n”将取什么值,请任何人解释一下。仅简单解释一下该代码在您的情况下是如何工作的: 将第一个编号(2)分配给此行的第二个编号时:
second_num = first_number(2)
second_num = first_number(2)
lambda first: first * n
您调用了函数first\u number
,并将n
替换为2。结果被分配到second\u num
现在,函数first\u number
不仅仅返回一个像常量一样的值:它返回一个函数,因为lambda
是一个没有名字的函数(进一步了解lambda是如何工作的),而您只是将n
替换为2
,并将该函数分配给second\u num
返回函数的函数。。。同时也有点奇怪和酷,你不觉得吗?;)
你可以这样说:
second_num = first_number(2)
second_num = first_number(2)
lambda first: first * n
实际上变成(或者你至少可以这样解释):
所以在运行second_num(20)
之后,它显然返回40
那么什么是lambda:
如前所述,lambda是一个未命名的函数,因此是一个没有名称的函数。你可以解释这句话:
second_num = first_number(2)
second_num = first_number(2)
lambda first: first * n
作为一种功能,例如:
def thisisafunction(first):
return first*n
所以在lambda
之后就是参数,逗号分隔。冒号后面的:
是函数体
应用lambda函数的另一种方法是保存一些代码。就像Python的filter
function(),它要求函数作为参数。这样可以节省大量代码:
def second_num(first):
return first * 2 #the 2 you passed in first_number
numbers_list = [2, 6, 8, 10, 11, 4, 12, 7, 13, 17, 0, 3, 21]
filtered_list = list(filter(lambda num: (num > 7), numbers_list))
print(filtered_list)
vs
希望这能把事情弄清楚 只看lambda
lambda first:first*n
相当于一个函数:
def fn(第一个):
先返回*n
首先
是参数,然后在冒号后面返回表达式的结果。n
来自非lambda特定的闭包。n
是2
,第一个是20
。注意
def first_number(n):
return lambda first : first * n
是一个本身返回函数()的函数!因此
大致相当于
def second_num(first):
return first * 2
其中,来自第一个函数内部的n
执行时间固定为2
,并且仍然可以作为一个函数访问
类似于
def first_number(n):
def lambda_fuc(first):
return first * n
return lambda_fuc
def first_number(n=2):
def lambda_fuc(first=20):
return first * n
return lambda_fuc
所以
类似于
def first_number(n):
def lambda_fuc(first):
return first * n
return lambda_fuc
def first_number(n=2):
def lambda_fuc(first=20):
return first * n
return lambda_fuc
我们得到了40个感谢@Erik的回复,你能解释一下变量是如何取值的吗?你能更具体地解释一下变量是如何取值的吗?您可以将n
视为占位符,需要将其替换为实际值。first
变量是一个实际参数。因此,传入函数的参数是first
@我想我理解你的问题了。更新了我的答案,希望这能让事情变得清楚。我现在明白了,你的第一点“first_number(2)”将lambda函数返回到“second_num”。我希望它将“n”设置为2,并且在程序执行结束之前不会改变。即使我对第二点也有点困惑,但这也被澄清了,非常感谢@ErikYou,我们绝对欢迎。很高兴事情澄清了<代码>第一个数字(2)
返回一个函数。然后使用值20
调用此函数。返回的函数计算2*20
。到底哪一部分让你困惑?你有没有读过关于兰博达斯的书?这能回答你的问题吗?