在 Python 中,lambda 是一种用于创建匿名函数的表达式。它语法简洁、灵活高效,常用于函数作为参数传递的场景,尤其在处理简洁逻辑或与高阶函数结合时非常实用。
一、lambda 函数的定义与语法
lambda 函数是一种没有函数名的函数,通常用于临时、一次性使用的场景。
1、lambda 的语法结构
lambda 参数1, 参数2, ... : 表达式语法说明:
(1)关键字 lambda 是关键字,表示定义一个匿名函数。
(2)冒号 : 用于分隔参数和表达式。
(3)右侧只能是单个表达式,该表达式的结果会被自动返回(不需要写 return)。
(4)整个 lambda 表达式的本质是一个函数对象,可以赋值给变量、作为参数传递、作为返回值等。
2、使用示例
(1)与定义普通函数对比。
# 使用 lambda 定义平方函数
square = lambda x: x * x
print(square(3)) # 输出 9
# 等价的普通函数定义
def square(x):
return x * x将 lambda 表达式赋给变量后,即可像调用普通函数一样来使用。
(2)可以有一个或多个参数。
# 多参数加法
add = lambda x, y: x + y
print(add(3, 5)) # 输出: 8(3)右侧只能是单个表达式,不能包含赋值语句、循环或语句块。
# 在 lambda 中使用条件表达式
max_func = lambda a, b: a if a > b else b
print(max_func(3, 7)) # 7# 错误示例:lambda 中不能有赋值语句(= 是语句,不是表达式)
lambda x: x = x + 1 # SyntaxError二、lambda 与高阶函数
在 Python 中,高阶函数(Higher-Order Function)是指至少满足以下两点之一的函数:
(1)接受一个或多个函数作为参数。
(2)返回一个函数作为结果。
由于整个 lambda 表达式本质上是一个函数对象,完全可以作为高阶函数的参数或返回值。
1、lambda 作为函数的参数
示例 1:作为普通函数的参数
def apply_twice(func, x):
return func(func(x))
print(apply_twice(lambda x: x + 1, 3)) # 输出:5示例 2:嵌套 lambda
adder = lambda x: lambda y: x + y
add5 = adder(5)
print(add5(3)) # 82、lambda 作为函数的返回值
def make_adder(n):
return lambda x: x + n
add5 = make_adder(5)
print(add5(3)) # 8三、lambda 在常用高阶函数中的应用
Python 提供了很多支持函数作为参数的内置函数,如 map()、filter()、sorted()、reduce() 等,它们都可与 lambda 搭配使用。
1、map() :批量映射转换
map(function, iterable)map() 函数可对 iterable(可迭代对象,如列表、元组、字符串等)中的每个元素,应用 function 函数,返回映射后的新迭代器。
# 对序列中每个元素进行操作
nums = [1, 2, 3]
squares = list(map(lambda x: x ** 2, nums))
print(squares) # [1, 4, 9]2、sorted():按指定依据排序
sorted(iterable, *, key=None, reverse=False)sorted()返回一个排序后的新列表。可通过 key (用于指定排序依据的函数)指定排序规则,reverse=True 表示降序。
# 示例 1:按字符串长度排序
words = ['apple', 'pear', 'banana', 'kiwi']
# 排序依据是字符串的长度
result = sorted(words, key=lambda x: len(x))
print(result) # ['kiwi', 'pear', 'apple', 'banana']# 示例 2:按元组中第 2 项排序
students = [('Tom', 88), ('Jerry', 95), ('Lucy', 78)]
# 按成绩(元组的第二项)排序
result = sorted(students, key=lambda x: x[1])
print(result)
# 输出: [('Lucy', 78), ('Tom', 88), ('Jerry', 95)]# 示例 3:按字典中某个字段排序
users = [
{'name': 'Alice', 'age': 30},
{'name': 'Bob', 'age': 25},
{'name': 'Charlie', 'age': 35}
]
# 按 age 升序排序
result = sorted(users, key=lambda x: x['age'])
print(result)3、filter():条件筛选
filter(function, iterable)filter() 函数可对 iterable 中的每个元素保留那些使 function(x) 为 True 的元素。
# 筛选序列中的元素
nums = [1, 2, 3, 4, 5, 6]
even = list(filter(lambda x: x % 2 == 0, nums))
print(even) # [2, 4, 6]4、reduce() :连续归约计算
reduce(function, iterable[, initializer])reduce() 函数可将函数 function 依次作用于 iterable 中的元素,从而将其归约成一个值。可选的 initializer 会作为初始值参与计算。
# 计算乘积
from functools import reduce
nums = [1, 2, 3, 4]
product = reduce(lambda x, y: x * y, nums)
print(product) # 24“点赞有美意,赞赏是鼓励”
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.