高阶函数

发布时间 2023-07-09 11:23:22作者: Allen_Hao

什么是高阶函数?

在Python中,高阶函数是指能够接受函数作为参数或返回函数作为结果的函数。

 

示例

 

'''
在Python中,高阶函数是指能够接受函数作为参数或返回函数作为结果的函数。
换句话说,高阶函数将函数作为一等公民对待,可以像其他数据类型一样进行传递和操作。
'''

'''
1. 函数作为参数:高阶函数可以接受一个或多个函数作为参数,以便在函数体内部调用或处理这些函数。
例如,map()、filter()和sorted()函数都接受函数作为参数来操作列表的元素。
'''


# 1.1 定义函数
def square(x):
    return x ** 2


numbers = [1, 2, 3, 4, 5]
# 1.2 使用高阶函数map,让square函数当实参,传入map函数
squared_numbers = map(square, numbers)  # 使用map()将square函数应用于numbers列表中的每个元素
print(squared_numbers)  # <map object at 0x000001F47B9D6E60>
print(list(squared_numbers))  # [1, 4, 9, 16, 25]

'''
2. 函数作为返回值:高阶函数可以根据条件动态地返回一个函数。这样的函数被称为工厂函数或闭包函数。一个常见的例子是装饰器。
'''


def greet():
    def say_hello():
        return "Hello"

    return say_hello


hello_func = greet()  # 调用greet()函数返回say_hello函数
message = hello_func()  # 调用hello_func函数
print(message)  # Hello


def make_counter(increment):
    count = 0

    def counter():  # 多次调用就等价于在此处有一个for循环调用此函数
        nonlocal count
        count += increment
        return count

    return counter


# 返回是函数的引用,记住是引用,
counter_1 = make_counter(1)  # 创建一个增量为1的计数器函数
print(counter_1())  # 输出:1
print(counter_1())  # 输出:2  counter_1函数还没有死亡即它的栈还在,多次调用就等价于for循环

# 生成1个新的引用
counter_5 = make_counter(5)  # 创建一个增量为5的计数器函数
print(counter_5())  # 输出:5
print(counter_5())  # 输出:10

'''
3. Lambda函数(匿名函数):Lambda函数是一种特殊的函数形式,它可以在需要函数的地方快速定义简单的函数。
通常用于临时的、简单的功能需求,不需要为其定义一个独立的函数。常与高阶函数一起使用
'''
numbers = [1, 2, 3, 4, 5]
# lambda x: x ** 2 整体作为一个匿名函数,作为实参传给map函数,此处map函数是高阶函数,对比示例1
squared_numbers = map(lambda x: x ** 2, numbers)  # 使用lambda函数对numbers列表中的每个元素进行平方操作
print(list(squared_numbers))  # [1, 4, 9, 16, 25]