跳转至

Python 笔记 | 高阶和匿名函数

在 Python 中,高阶函数(Higher-Order Functions)和匿名函数(或称为lambda函数)是两个重要的概念,它们使得代码更加灵活和简洁。

高阶函数(Higher-Order Functions)

高阶函数是那些接收函数作为参数或返回函数作为结果的函数。在 Python 中,函数是一等公民(First-Class Citizens),这意味着它们可以被赋值给变量、作为参数传递给其他函数,以及从其他函数返回。

示例

接收函数作为参数

Python
1
2
3
4
5
6
7
def apply_func(func, arg):
    return func(arg)

def double(x):
    return x * 2

result = apply_func(double, 5)  # result is 10

返回函数作为结果

Python
1
2
3
4
5
def create_multiplier(n):
    return lambda x: x * n  # lambda arguments: expression 即匿名函数

multiply_by_three = create_multiplier(3)
result = multiply_by_three(5)  # result is 15

匿名函数(Lambda Functions)

匿名函数是一种简单的、一行的函数,可以用 lambda 关键字定义。它们主要用于需要一个函数对象,但又不值得用 def 语句定义一个完整函数的情况。

语法

Python
# arguments 作为传入参数,可以多个,用, 隔开;expression 作为返回结果
lambda arguments: expression

示例

简单的匿名函数

Python
1
2
3
double = lambda x: x * 2  # 此处传入参数为 x,表达式 x * 2 作为返回结果
result = double(5)  # result is 10
result = (lambda x: x * 2)(5)  # 和上一行等价

与高阶函数结合使用

Python
1
2
3
4
def apply_to_list(func, lst):
    return [func(x) for x in lst]  # 列表推导式,详见 列表list 章节

squared = apply_to_list(lambda x: x ** 2, [1, 2, 3, 4])  # squared is [1, 4, 9, 16]

使用场景

排序:Python 的 sorted 函数可以接受一个 key 参数,该参数是一个函数,用于在比较之前对每个元素进行转换。这常常与lambda函数一起使用。

Python
sorted_list = sorted([('b', 2), ('a', 1), ('c', 3)], key=lambda x: x[1])  # sorted by second element

映射:在列表推导式中使用lambda函数可以简洁地对列表中的每个元素应用某种操作。

回调函数:在异步编程、事件驱动编程等场景中,经常需要将一个函数作为参数传递给另一个函数,以便在某个事件发生时调用它。

高阶函数和 lambda 函数是 Python 函数式编程风格的重要组成部分,它们使代码更加灵活、可重用和简洁。