【Python-匿名函数】

6 阅读3分钟

一、匿名函数(lambda)核心讲解

匿名函数(lambda 表达式)是 Python 中一种轻量级、无需定义函数名的函数形式,核心作用是快速创建简单的一次性函数,常配合 map()filter()sorted() 等内置函数使用。

1. 基本语法

lambda 参数列表: 表达式
  • 参数列表:可以是 0 个、1 个或多个参数(和普通函数一致);
  • 表达式:必须是单行(不能写循环、分支等复杂逻辑),执行后自动返回结果(无需写 return);
  • 无函数名:lambda 本身是一个表达式,执行后直接返回函数对象,通常直接使用或赋值给变量。

2. 对比普通函数,理解匿名函数

普通函数匿名函数(lambda)
def add(a, b):lambda a, b: a + b
return a + b无函数名,单行完成逻辑
可写复杂逻辑(循环 / 分支)仅支持单行表达式
可重复调用适合一次性使用,或简化代码

示例 1:基础使用

# 1. 无参数 
hello = lambda: "Hello, Python!" 
print(hello()) # 输出:Hello, Python! 

# 2. 单个参数 
square = lambda x: x * x 
print(square(5)) # 输出:25

# 3. 多个参数 
add = lambda a, b, c: a + b + c
print(add(1, 2, 3)) # 输出:6

3. 匿名函数的典型应用场景

匿名函数很少单独使用,核心价值是配合内置函数简化代码,以下是最常用的场景:

场景 1:配合 sorted () 自定义排序规则

# 对列表嵌套的元组,按元组第二个元素排序 
students = [("小明", 90), ("小红", 85), ("小刚", 95)] 
# 普通函数写法 
def get_score(student):
    return student[1] 
sorted_students1 = sorted(students, key=get_score)

# lambda 简化写法 
sorted_students2 = sorted(students, key=lambda x: x[1])
print(sorted_students2) # 输出:[('小红', 85), ('小明', 90), ('小刚', 95)]

注:sort () 和 sorted () 核心区别

特性sort()sorted()
所属对象列表(list)的内置方法(仅列表能用)Python 内置函数(所有可迭代对象都能用:列表、元组、字符串、字典等)
是否修改原数据原地排序(直接修改原列表,无返回值)不修改原数据,返回一个新的排序后列表
返回值None(没有返回值)排序后的新列表
使用语法列表.sort (key=..., reverse=...)sorted (可迭代对象,key=..., reverse=...)

场景 2:配合 map () 批量处理数据

# 将列表中所有数字翻倍 
nums = [1, 2, 3, 4] 
# 普通函数写法 
    def double_num(x):
        return x * 2 
    result1 = list(map(double_num, nums))
    
# lambda 简化写法 
result2 = list(map(lambda x: x * 2, nums))) 
print(result2) # 输出:[2, 4, 6, 8]

场景 3:配合 filter () 过滤数据

# 筛选列表中的偶数 
nums = [1, 2, 3, 4, 5, 6] 
# lambda 写法
result = list(filter(lambda x: x % 2 == 0, nums)) 
print(result) # 输出:[2, 4, 6]

4. 注意事项

  1. lambda 表达式仅支持单行表达式,不能写 if-else 以外的分支、循环(if-else 可简写为三元表达式):
# 合法:三元表达式 
func = lambda x: "偶数" if x % 2 == 0 else "奇数" 
print(func(3)) # 输出:奇数 

# 非法:多行逻辑(需改用普通函数) 
# func = lambda x: 
    # if x > 0: 
        # return "正数"
  1. 不要滥用 lambda:如果逻辑复杂(超过单行),或需要重复调用,建议用 def 定义普通函数(可读性更高);

  2. lambda 可以作为函数参数传递(如上述 sorted/filter/map),这是其最核心的使用场景。

三、总结(核心要点)

  1. lambda 本质:无函数名的单行函数,语法为 lambda 参数: 表达式,自动返回表达式结果;
  2. 核心场景:配合 sorted()/map()/filter() 简化代码,实现自定义排序、批量处理、数据过滤;
  3. 使用原则:仅用于简单逻辑,复杂逻辑(多行、循环)优先用普通函数(def),保证代码可读性。