高阶函数

什么是高阶函数?

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
'''
0. 体验
'''
def sum_num(a, b, f):  # 定义1个高阶函数:入参可接受一个函数f
    return f(a) + f(b)  # 调用函数f
 
 
result1 = sum_num(-1, 5, abs# 把内置函数abs作为实参,传入sum_num
print(result1) # 6
 
 
result2 = sum_num(1.1, 1.3, round) # 把内置函数round作为实参传入
print(result2)  # 2

  

示例

 

复制代码
'''
在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]
复制代码

 

posted @   Allen_Hao  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示