在 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))  # 8

2、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

点赞有美意,赞赏是鼓励