当前位置: 首页 > news >正文

Python 高阶函数:用函数玩出花样

在 Python 里,函数不仅能执行逻辑、组织代码,还能像变量一样被传来传去、当做参数传递,这就为“高阶函数”打下了基础。掌握高阶函数,是写出优雅、简洁、可复用代码的关键一步。

参考文章:Python 高阶函数 | 简单一点学习 easyeasy.me

一、什么是高阶函数?

1.1 函数是“第一类对象”

在 Python 中,函数是“第一类对象”,意味着:

  • 函数可以赋值给变量
  • 函数可以作为参数传递
  • 函数可以作为返回值返回
def greet(name):return f"Hello, {name}"say_hello = greet
print(say_hello("Alice"))  # Hello, Alice

1.2 高阶函数的定义

如果一个函数满足以下任意一个条件,它就是高阶函数:

  • 接收一个或多个函数作为参数
  • 返回一个函数

二、内置高阶函数速览

Python 提供了几个常用的内置高阶函数,非常实用,咱们一个个来看:

2.1 map(): 映射操作

对可迭代对象里的每个元素执行函数操作。

nums = [1, 2, 3, 4]
squared = map(lambda x: x ** 2, nums)
print(list(squared))  # [1, 4, 9, 16]

2.2 filter(): 过滤操作

保留符合条件的元素。

nums = [1, 2, 3, 4, 5]
evens = filter(lambda x: x % 2 == 0, nums)
print(list(evens))  # [2, 4]

2.3 reduce(): 累计计算

来自 functools,把所有元素用一个函数合并成一个结果。

from functools import reducenums = [1, 2, 3, 4]
total = reduce(lambda x, y: x + y, nums)
print(total)  # 10

2.4 sorted():自定义排序

key 参数可以传函数,对排序方式进行控制。

words = ["banana", "apple", "cherry"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words)  # ['apple', 'banana', 'cherry']

三、函数作为返回值

Python 函数里可以定义另一个函数,然后返回它。可以根据外部参数“动态生成”函数。

def make_multiplier(factor):def multiply(x):return x * factorreturn multiplydouble = make_multiplier(2)
print(double(5))  # 10

这个技巧非常强大,比如可以创建日志包装器、延迟执行函数等。


四、函数作为参数传递

你可以将一个函数作为参数传递给另一个函数,从而定制行为。

def apply_func(x, func):return func(x)print(apply_func(3, lambda x: x ** 3))  # 27

这个模式在很多地方都有用,比如回调函数、策略模式、装饰器等。


五、常见使用场景

5.1 数据处理

高阶函数和匿名函数(lambda)搭配,可以让代码更简洁:

data = ["  hello ", " world ", "Python  "]
cleaned = map(lambda s: s.strip().upper(), data)
print(list(cleaned))  # ['HELLO', 'WORLD', 'PYTHON']

5.2 条件过滤

filter() + lambda 是处理大量数据时的利器:

nums = range(100)
div_by_7 = filter(lambda x: x % 7 == 0, nums)
print(list(div_by_7))

六、组合函数:函数的嵌套与链式调用

高阶函数常用于函数式编程,像流水线一样地组合操作:

from functools import reducewords = ["python", "is", "awesome"]
result = reduce(lambda x, y: x + " " + y.upper(), words, "")
print(result.strip())  # python IS AWESOME

七、进阶:自定义高阶函数

你完全可以写出自己的高阶函数,来封装常用逻辑:

def repeat(n):def decorator(func):def wrapper(*args, **kwargs):for _ in range(n):func(*args, **kwargs)return wrapperreturn decorator@repeat(3)
def greet():print("Hi!")greet()

八、总结

  • 高阶函数就是可以接收函数或者返回函数的函数。
  • 它能让代码更简洁、可复用、更灵活。
  • map()filter()reduce() 是最常见的高阶函数应用。
  • 在数据处理、回调、装饰器等场景中,高阶函数非常常用。
http://www.dtcms.com/a/318100.html

相关文章:

  • gpt-oss openai开源大模型
  • MCP 协议:AI 时代的 “万能转接头”,从 “手动粘贴” 到 “万能接口”:MCP 协议如何重构 AI 工具调用规则?
  • C++11之智能指针
  • springboot项目justAuth扩展第二个小程序
  • clock_adjtime、clock_getres、clock_gettime、 clock_nanosleep、clock_settime 系统调用及示例
  • 【面试八股总结】线程/进程同步问题
  • 概率/期望 DP Let‘s Play Osu!
  • 【数论】素数
  • Vue3入门到精通: 1.2 Vue3响应式系统深度解析
  • go与grpc
  • 网站、域名、IP在什么场景下需要备案
  • Linux之Shell脚本基本语法
  • InfluxDB 集群部署与高可用方案(二)
  • 基于vue的财务管理系统/基于php的财务管理系统
  • 02.【数据结构-C语言】顺序表(线性表概念、顺序表实现:增删查、前向声明、顺序表实现通讯录项目:增删改查、通讯录数据导入及保存到本地文件)
  • <form> + <iframe> 方式下载大文件的机制
  • Python 通过Playwright+OpenCV破解滑动验证码 实例
  • 【Python】命令行工具实现监控ctrl+c与运行时长终止任务
  • 2024学年云南省职业院校技能大赛 “信息安全管理与评估”赛项 比赛样题任务书
  • FreeRTOS临界资源保护方法
  • 商派小程序商城(小程序/官网/APP···)的范式跃迁与增长再想象
  • android NDK 报错日志解读和还原报错方法名
  • Mybatis的高级特性
  • 【自动化运维神器Ansible】playbook核心组件之tags深度解析
  • 第一性原理科学计算服务器如何选择配置-CPU选择篇
  • thinkpad E14重装win 10系统
  • 云端软件工程智能代理:任务委托与自动化实践全解
  • Spring Boot Actuator 监控功能的简介及禁用
  • Java面试题036:一文深入了解VUE(1)
  • 批量提问程序开发方案:基于Python的百度文小言接口实现