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 函数让代码变得难以理解,那么最好还是使用普通函数。


相关推荐
IMPYLH29 分钟前
Python 的内置函数 reversed
笔记·python
小赖同学啊2 小时前
物联网数据安全区块链服务
开发语言·python·区块链
码荼3 小时前
学习开发之hashmap
java·python·学习·哈希算法·个人开发·小白学开发·不花钱不花时间crud
小陈phd4 小时前
李宏毅机器学习笔记——梯度下降法
人工智能·python·机器学习
kk爱闹4 小时前
【挑战14天学完python和pytorch】- day01
android·pytorch·python
Blossom.1184 小时前
机器学习在智能建筑中的应用:能源管理与环境优化
人工智能·python·深度学习·神经网络·机器学习·机器人·sklearn
亚力山大抵4 小时前
实验六-使用PyMySQL数据存储的Flask登录系统-实验七-集成Flask-SocketIO的实时通信系统
后端·python·flask
showyoui4 小时前
Python 闭包(Closure)实战总结
开发语言·python
amazinging5 小时前
北京-4年功能测试2年空窗-报培训班学测开-第四十一天
python·学习·appium
amazinging5 小时前
北京-4年功能测试2年空窗-报培训班学测开-第三十九天
python·学习·appium