Python 中的 lambda 表达式
写 Python 作业的时候,map()
传入一个列表的二倍,第一个参数写 number*2
怎么也过不了:
1 |
|
看来直接对列表乘 2 是不可行的。我问 ChatGPT,ChatGPT 告诉我用 lambda
表达式,那正好简单聊聊。
定义
lambda
函数是一种小型、匿名、内联的函数,它可以具有任意数量的参数,但只能有一个表达式。
小型:指的是
lambda
函数通常用于简单的功能需求,而不是复杂的函数逻辑。lambda
函数的简洁性也就是在这里体现的。匿名:指的是
lambda
函数是一种没有显式名称的函数,它们在定义时不需要提供函数名,也只能通过赋值给变量或作为参数传递给其他函数来使用因此,lambda
函数通常用于临时、一次性的功能需求。内联:指的是
lambda
函数的定义通常是在使用它们的地方直接进行,而不是在代码中单独定义。因此,lambda
函数可以被直接嵌入到表达式中,无需额外的函数定义。
我个人理解:lambda
就是一个长得像表达式、用起来像表达式的一个函数。
其实我觉得这个匿名性质挺有趣的。。
语法格式
1 |
|
其中:
lambda
是 Python 的关键字,用于定义lambda
函数。arguments
是参数列表,可以包含零个或多个参数,但必须在冒号(:
)前指定。expression
是一个表达式,用于计算并返回函数的结果。
例子
单个实参:
1
2f = lambda x: x+10
print(f(5))它等价于:
1
2
3
4def f(x):
return x+10
print(f(5))输出结果都是
15
。这种简单东西相比于传统定义函数,是不是简洁很多?
多个实参:
1
2f = lambda x,y: x*y
print(f(5,10))它等价于:
1
2
3
4def f(x,y):
return x*y
print(f(5,10))lambda
函数通常与内置函数如map()
、filter()
和reduce()
一起使用,以便在集合上执行操作。其实这才是lambda
表达式的真正用法。1
2
3numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared)输出结果:
[1, 4, 9, 16, 25]
它等价于:
1
2
3
4
5
6def square(x):
return x ** 2
numbers = [1, 2, 3, 4, 5]
squared = list(map(square, numbers))
print(squared)这里必须定义一个函数,是因为
map()
、list()
、reduce()
等函数的第一个参数,必须是一个函数,而不能是一个单独的表达式,因此我们如果想实现上述平方的效果,我们不能直接传入x**2
,必须传入一个返回平方值的函数。使用lambda
表达式和单独定义函数,那个简洁一目了然了吧。
总结
lambda
表达式可以在某些必须传入函数的场合下,将一些简单的表达式封装为函数,方便调用,形式也很直观,可以说非常方便。