Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Lambda函数在这段代码中是如何工作的?_Python_Lambda - Fatal编程技术网

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

我在一个网站上学习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_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
。到底哪一部分让你困惑?你有没有读过关于兰博达斯的书?这能回答你的问题吗?