Python 中的 lambda 表达式

写 Python 作业的时候,map() 传入一个列表的二倍,第一个参数写 number*2 怎么也过不了:

1
2
3
4
5
Traceback (most recent call last):
File "/tmp/test.py", line 2, in <module>
new_list = list(map(numbers*2, numbers))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: 'list' object is not callable

看来直接对列表乘 2 是不可行的。我问 ChatGPT,ChatGPT 告诉我用 lambda 表达式,那正好简单聊聊。

定义

lambda 函数是一种小型、匿名、内联的函数,它可以具有任意数量的参数,但只能有一个表达式。

  1. 小型:指的是 lambda 函数通常用于简单的功能需求,而不是复杂的函数逻辑。lambda 函数的简洁性也就是在这里体现的。

  2. 匿名:指的是 lambda 函数是一种没有显式名称的函数,它们在定义时不需要提供函数名,也只能通过赋值给变量或作为参数传递给其他函数来使用因此,lambda 函数通常用于临时一次性的功能需求。

  3. 内联:指的是 lambda 函数的定义通常是在使用它们的地方直接进行,而不是在代码中单独定义。因此,lambda 函数可以被直接嵌入到表达式中,无需额外的函数定义。

我个人理解:lambda 就是一个长得像表达式用起来像表达式的一个函数

其实我觉得这个匿名性质挺有趣的。。

语法格式

1
lambda arguments: expression

其中:

  • lambda 是 Python 的关键字,用于定义 lambda 函数。

  • arguments 是参数列表,可以包含零个多个参数,但必须在冒号(:)前指定

  • expression 是一个表达式,用于计算并返回函数的结果。

例子

  1. 单个实参:

    1
    2
    f = lambda x: x+10
    print(f(5))

    它等价于:

    1
    2
    3
    4
    def f(x):
    return x+10

    print(f(5))

    输出结果都是 15

    这种简单东西相比于传统定义函数,是不是简洁很多?

  2. 多个实参:

    1
    2
    f = lambda x,y: x*y
    print(f(5,10))

    它等价于:

    1
    2
    3
    4
    def f(x,y):
    return x*y

    print(f(5,10))
  3. lambda 函数通常与内置函数如 map()filter()reduce() 一起使用,以便在集合上执行操作。其实这才是 lambda 表达式的真正用法。

    1
    2
    3
    numbers = [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
    6
    def 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 表达式可以在某些必须传入函数的场合下,将一些简单的表达式封装为函数,方便调用,形式也很直观,可以说非常方便。


Python 中的 lambda 表达式
https://gt610.codeberg.page/2024/03/17/python-lambda/
作者
GT610
发布于
2024年3月17日
许可协议