首页 > 解决方案 > 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”将采用什么值,谁能解释一下。

标签: pythonlambda

解决方案


只是简单地解释一下这段代码在你的情况下是如何工作的:在这一行上分配first_number(2)时:second_num

second_num = first_number(2)

您调用了该函数first_number并替换n为 2。结果分配给second_num

现在,该函数first_number不只是像常量一样返回一个值:它返回一个函数,因为lambda它是一个没有名称的函数(进一步了解 lambda 的工作原理),您只需将该函数n替换为.2second_num

一个函数返回一个函数……你不觉得有点奇怪和酷吗?;)

所以你可以说这一行:

second_num = first_number(2)

实际上变成(或者你至少可以这样解释):

def second_num(first):
    return first * 2 #the 2 you passed in first_number

所以在运行之后second_num(20),它显然返回 40。

那么什么是lambda:

如前所述,lambda 是一个未命名的函数,因此是一个没有名称的函数。你可以解释这一行:

lambda first: first * n

作为一个函数,如:

def thisisafunction(first):
    return first*n

所以紧随其后lambda的是参数,以逗号分隔。而冒号之后:是函数体。

应用 lambda 函数的另一种方法是保存一些代码。就像 Python 的filter函数(https://docs.python.org/3/library/functions.html#filter)一样,它要求一个函数作为参数。它以这种方式为您节省了很多代码:

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)

对比

numbers_list = [2, 6, 8, 10, 11, 4, 12, 7, 13, 17, 0, 3, 21]

def filterfunction(num):
    return num > 7

filtered_list = list(filter(filterfunction, numbers_list))
    
print(filtered_list)

希望这能让事情变得清楚!


推荐阅读