Python编程精进:Lambda 函数

Lambda 函数是什么?

首先,什么是 Lambda 函数 呢?这种函数是一种快速创建单行函数的方法。我们不需要给这个函数命名。

它简单、快速,且容易使用。

Lambda 函数的基本语法:

python 复制代码
lambda 参数: 表达式

例如,计算两个数字的和,我们可以这样写:

python 复制代码
add = lambda x, y: x + y
print(add(5, 3))

正如我们所见,无需使用 def,也不需要额外的代码行。我们直接写了一个单行函数。

追溯历史,Lambda 表达式的概念来源于 λ 演算(Lambda Calculus),由美国数学家 阿隆佐·邱奇(Alonzo Church) 在 1936 年 发明。其在论文《An Unsolvable Problem of Elementary Number Theory》中提出了 λ 演算,这是一种纯粹的数学逻辑系统,用于描述函数和计算。它的主要特点是:

  • 一切计算都基于函数调用
  • 没有变量和赋值
  • 递归和高阶函数(函数可以作为参数传递)

其重要性主要体现在这些方面:

  • 证明了 图灵完备性,即能够表示所有可计算的函数。
  • 成为了函数式编程语言(如 Lisp、Haskell)的理论基础。
  • 影响了现代编程语言中 Lambda 表达式的设计。

为什么不能直接使用普通函数呢?

对于初学者来说,这可能是一个很好的问题。请记住,当我们需要创建逻辑复杂或需要重复使用的函数时,普通函数是不错的选择。

但对于一些小任务,Lambda 函数是一个很好的选择。尤其是当我们使用 mapfiltersorted 这类工具时,Lambda 函数非常有帮助。

例子

1. 排序

假设我们有一个包含名字和年龄的列表。现在,我们只想按照年龄对列表进行排序。我们可以使用 Lambda 函数来实现:

python 复制代码
people = [
    ('Arsh', 25),
    ('Balli', 30),
    ('Cutie', 20)
]

sorted_people = sorted(people, key=lambda person: person[1])
print(sorted_people)

如果没有 Lambda 函数,我们不得不编写一个单独的函数来实现:

python 复制代码
def get_age(person):
    return person[1]

people = [
    ('Arsh', 25),
    ('Balli', 30),
    ('Cutie', 20)
]

sorted_people = sorted(people, key=get_age)
print(sorted_people)

2. 过滤数据

例如,如果我们有一个数字列表,我们只想保留其中的偶数。那么,我们无需编写一个完整的函数,可以直接使用 lambdafilter 函数:

python 复制代码
num = [1, 2, 3, 4, 5, 6]

evens = list(filter(lambda x: x % 2 == 0, num))
print(evens)

如果没有 Lambda 函数,我们需要定义一个单独的函数来实现过滤逻辑:

python 复制代码
def is_even(x):
    return x % 2 == 0

num = [1, 2, 3, 4, 5, 6]

evens = list(filter(is_even, num))
print(evens)

3. 转换数据

如果我们想将列表中的每个数字都翻倍,那么我们可以使用 lambdamap 函数:

python 复制代码
num = [1, 2, 3, 4]

doubled = list(map(lambda x: x * 2, num))
print(doubled)

如果没有 Lambda 函数,我们需要定义一个单独的函数来实现转换逻辑:

python 复制代码
def double(x):
    return x * 2

num = [1, 2, 3, 4]

doubled = list(map(double, num))
print(doubled)

4. 组合函数

我们可以使用 Lambda 函数与 reduce 函数来组合列表中的所有元素。例如,如果我们想计算列表中所有数字的总和:

python 复制代码
from functools import reduce

num = [1, 2, 3, 4]

total = reduce(lambda x, y: x + y, num)
print(total)

如果没有 Lambda 函数,我们需要定义一个单独的函数来实现累加逻辑:

python 复制代码
from functools import reduce

def add(x, y):
    return x + y

num = [1, 2, 3, 4]

total = reduce(add, num)
print(total)

什么时候不应该使用 Lambda 函数?

如果我们说 Lambda 函数适用于所有情况,那绝对是错误的。它们适用于快速且简单的任务,但对于逻辑复杂的函数则不然。

在这种情况下,我们必须使用通过 def 定义的普通函数。如果 Lambda 函数让代码难以阅读,就不要使用它。例如:

python 复制代码
complex_lambda = lambda x: (x ** 2 if x % 2 == 0 else x ** 3)

上面的函数虽然可以工作,但它让代码难以阅读。因此,要尽量避免这种情况。

有时候,我也会在复杂任务中使用 Lambda 函数😅😅,但这并不是一个好的做法。

总结

Lambda 函数是 Python 中一个非常强大的工具,它可以帮助我们快速实现一些简单的功能,而无需定义一个完整的函数。它特别适合用于 mapfiltersorted 等内置函数的参数。然而,Lambda 函数也有其局限性,它不适合用于复杂的逻辑。在代码可读性方面,如果 Lambda 函数让代码变得难以理解,那么最好还是使用普通函数。


相关推荐
万粉变现经纪人1 小时前
如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘tokenizers’ 问题
python·selenium·测试工具·scrapy·beautifulsoup·fastapi·pip
编程武士3 小时前
从50ms到30ms:YOLOv10部署中图像预处理的性能优化实践
人工智能·python·yolo·性能优化
我的xiaodoujiao3 小时前
Windows系统Web UI自动化测试学习系列2--环境搭建--Python-PyCharm-Selenium
开发语言·python·测试工具
傻啦嘿哟6 小时前
Python SQLite模块:轻量级数据库的实战指南
数据库·python·sqlite
Q_Q5110082856 小时前
python+django/flask+uniapp基于微信小程序的瑜伽体验课预约系统
spring boot·python·django·flask·uni-app·node.js·php
XueminXu6 小时前
Python读取MongoDB的JSON字典和列表对象转为字符串
python·mongodb·json·pymongo·mongoclient·isinstance·json.dumps
techdashen6 小时前
12分钟讲解Python核心理念
开发语言·python
jie*6 小时前
小杰机器学习(nine)——支持向量机
人工智能·python·机器学习·支持向量机·回归·聚类·sklearn
闭着眼睛学算法6 小时前
【华为OD机考正在更新】2025年双机位A卷真题【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言Py+Java+Cpp+C+Js+Go】
java·c语言·javascript·c++·python·算法·华为od
郝学胜-神的一滴7 小时前
谨慎地迭代函数所收到的参数 (Effective Python 第31条)
开发语言·python·程序人生·软件工程