目录
引言
一、简介
1.1 基本语法
1.2 优势
1.3 局限性
二、基本用法
2.1 无参数lambda 函数
2.2 多参数 lambda 函数
三、常见使用场景
3.1 与高阶函数配合使用
3.2 作为排序键
3.3 在 GUI 编程中作为回调函数
3.4 在 Pandas 中的应用
四、高级技巧
4.1 条件表达式
4.2 嵌套 Lambda 函数
4.3 默认参数
总结
引言
Python 中的 lambda
函数是一种创建匿名函数(没有名称的函数)的方式,它可以使代码更加简洁和易读。虽然功能有限,但在适当的场景下,lambda 函数能大大简化代码结构。
一、简介
1.1 基本语法
Lambda 函数是使用 lambda
关键字创建的匿名函数,其基本语法如下:
lambda arg1, arg2 : expression
参数:
lambda
:定义 lambda 函数的关键字
arg
:函数参数,可以是零个或多个,用逗号分隔
expression
:函数体,只能是一个表达式,不能包含多条语句
1.2 Lambda 函数的优势
-
当函数只需要使用一次时
-
当函数体非常简单,只有一条表达式时
-
作为参数传递给高阶函数时
1.3 Lambda 函数的局限性
-
只能包含一个表达式:Lambda 函数不能包含多条语句或复杂的逻辑结构。
-
没有语句:不能包含
if
、for
、while
等语句(但可以使用条件表达式)。 -
可读性:过于复杂的 lambda 函数会降低代码的可读性。
二、基本用法
2.1 无参数的 lambda 函数
# 普通函数定义
def square(x):print("hello world!")
# 等效的 lambda 函数
square = lambda : print("hello world!")
2.2 多参数的 lambda 函数
# 普通函数
def add(x, y):return x + y
# 等效的 lambda 函数
add = lambda x, y: x + y
print(add(3, 5)) # 输出: 8
三、常见使用场景
3.1 与高阶函数配合使用
Lambda 函数经常与 map()
, filter()
, reduce()
等高阶函数一起使用。
- 使用
map()
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # 输出: [1, 4, 9, 16, 25]
- 使用
filter()
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # 输出: [2, 4, 6, 8, 10]
- 使用
reduce()
from functools import reduce
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product) # 输出: 120
3.2 作为排序键
# 按姓名排序
students = [{'name': 'Alice', 'age': 25},{'name': 'Bob', 'age': 22},{'name': 'Charlie', 'age': 28}
]
# 按姓名排序
students_sorted_by_name = sorted(students, key=lambda x: x['name'])
print(students_sorted_by_name)
# 输出: [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 22}, {'name': 'Charlie', 'age': 28}]
# 按年龄排序
students_sorted_by_age = sorted(students, key=lambda x: x['age'])
print(students_sorted_by_age)
# 输出: [{'name': 'Bob', 'age': 22}, {'name': 'Alice', 'age': 25}, {'name': 'Charlie', 'age': 28}]
3.3 在 GUI 编程中作为回调函数
import tkinter as tk
root = tk.Tk()
button = tk.Button(root, text="Click me!", command=lambda: print("Button clicked!"))
button.pack()
root.mainloop()
3.4 在 Pandas 中的应用
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
# 创建新列,其值为 A 列和 B 列的和
df['C'] = df.apply(lambda row: row['A'] + row['B'], axis=1)
print(df)
四、高级技巧
4.1 条件表达式
# 返回两个数中较大的数
max_value = lambda x, y: x if x > y else y
print(max_value(10, 20)) # 输出: 20
4.2 嵌套 Lambda 函数
# 返回一个函数,该函数计算 x 的 n 次方
power = lambda n: lambda x: x ** n
square = power(2)
cube = power(3)
print(square(4)) # 输出: 16
print(cube(3)) # 输出: 27
4.3 默认参数
greet = lambda name, greeting="Hello": f"{greeting}, {name}!"
print(greet("Alice")) # 输出: Hello, Alice!
print(greet("Bob", "Hi")) # 输出: Hi, Bob!
总结
Lambda 函数是 Python 中一个强大而简洁的特性,当正确使用时,可以使代码更加简洁和易读。它们特别适合与高阶函数配合使用,或者作为简单的回调函数。
然而,重要的是要记住,lambda 函数并不总是最佳选择,特别是当逻辑变得复杂时。如在这些情况下,使用传统的 def
关键字定义函数通常是更好的选择:
-
当函数逻辑复杂,需要多条语句时
-
当函数需要文档字符串或注释时
-
当函数会被多次重用时
选择使代码最清晰、最易维护的方法,而不是一味追求简洁。