Python 函数式编程 第2版 PDF 文档
Python 具备函数式编程的许多核心特征,因此可以借鉴其他函数式语言的设计模式和编程技术,编写出简洁优雅的代码。本书首先介绍函数式编程的一般概念及特点,然后讲解迭代器、生成器表达式、内置函数、常用高阶函数、递归与归约、实用模块和装饰器的用法,以及避开 Python 严格求值顺序的变通方法、Web 服务设计方法和一些优化技巧。
本书适合 Python 开发人员阅读。
函数式编程为创建代码简洁明了的软件提供了许多技术。虽然 Python 不是纯粹的函数式语言,但仍然可以使用 Python 进行函数式编程。
Python 具备函数式编程的许多核心特征,使得我们可以借鉴其他函数式语言的设计模式和编程技术,编写出简洁优雅的代码。尤其值得一提的是 Python 的生成器表达式,使用它可以避免在内存中创建大型数据结构,通过降低资源消耗来提高执行速度。
目录
第 1 章 函数式编程概述
1.1 编程范式
1.2 细分过程范式
1.2.1 使用函数式范式
1.2.2 使用混合范式
1.2.3 对象的创建过程
1.2.4 乌龟塔
1.3 函数式编程经典示例
1.4 EDA
1.5 小结
第 2 章 函数式编程的特点
2.1 头等函数
2.1.1 纯函数
2.1.2 高阶函数
2.2 不可变数据结构
2.3 严格求值与非严格求值
2.4 用递归代替循环语句
2.5 函数类型系统
2.6 回到最初
2.7 几个高级概念
2.8 小结
第 3 章 函数、迭代器和生成器
3.1 编写纯函数
3.2 函数作为头等对象
3.3 使用字符串
3.4 使用元组和命名元组
3.4.1 使用生成器表达式
3.4.2 生成器的局限
3.4.3 组合生成器表达式
3.5 使用生成器函数清洗原始数据
3.6 使用列表、字典和 set
3.6.1 使用状态映射
3.6.2 使用 bisect 模块创建映射
3.6.3 使用有状态的 set
3.7 小结
第 4 章 使用集合
4.1 函数分类概览
4.2 使用可迭代对象
4.2.1 解析 XML 文件
4.2.2 使用高级方法解析文件
4.2.3 组对序列元素
4.2.4 显式使用 iter() 函数
4.2.5 扩展简单循环
4.2.6 将生成器表达式应用于标量函数
4.2.7 用 any() 函数和 all() 函数进行归约
4.2.8 使用 len() 和 sum()
4.2.9 使用汇总和计数进行统计分析
4.3 使用 zip() 函数实现结构化和平铺序列
4.3.1 将压缩序列解压
4.3.2 平铺序列
4.3.3 结构化一维序列
4.3.4 结构化一维序列的另一种方式
4.4 使用 reversed() 函数改变顺序
4.5 使用 enumerate() 函数包含下标值
4.6 小结
第 5 章 高阶函数
5.1 用 max() 函数和 min() 函数寻找极值
5.2 使用 Python 匿名函数
5.3 lambda 与 lambda 算子
5.4 使用 map() 将函数应用于集合
在 map() 中使用匿名函数
5.5 使用 map() 函数处理多个序列
5.6 使用 filter() 函数接收或舍弃数据
5.7 使用 filter() 函数检测异常值
5.8 在 iter() 函数中使用哨兵值
5.9 使用 sorted() 函数将数据排序
5.10 编写高阶函数
5.11 编写高阶映射和过滤函数
5.11.1 拆包并映射数据
5.11.2 打包多项数据并映射
5.11.3 平铺数据并映射
5.11.4 过滤并结构化数据
5.12 编写生成器函数
5.13 使用可调用对象构建高阶函数
确保正确的函数式设计
5.14 设计模式回顾
5.15 小结
第 6 章 递归与归约
6.1 简单数值递归
6.1.1 实现尾调用优化
6.1.2 保持递归形式
6.1.3 处理复杂的尾调用优化
6.1.4 使用递归处理集合
6.1.5 集合的尾调用优化
6.1.6 集合的归约与折叠:从多个到一个
6.2 group-by 归约:从多到少
6.2.1 用 Counter 做映射
6.2.2 用排序构建映射
6.2.3 使用键值分组或者分区数据
6.2.4 编写更通用的 group-by 归约
6.2.5 编写高阶归约
6.2.6 编写文件解析器
6.3 小结
第 7 章 元组处理技术
7.1 使用元组收集数据
7.2 使用命名元组收集数据
7.3 使用函数构造器创建命名元组
7.4 使用多种元组结构代替状态类
7.4.1 赋等级值
7.4.2 用包装代替状态变化
7.4.3 以多次包装代替状态变化
7.4.4 计算斯皮尔曼等级顺序相关度
7.5 多态与类型匹配
7.6 小结
第 8 章 itertools 模块
8.1 使用无限迭代器
8.1.1 用 count() 计数
8.1.2 使用实数参数计数
8.1.3 用 cycle() 循环迭代
8.1.4 用 repeat() 重复单个值
8.2 使用有限迭代器
8.2.1 用 enumerate() 添加序号
8.2.2 用 accumulate() 计算汇总值
8.2.3 用 chain() 组合多个迭代器
8.2.4 用 groupby() 切分迭代器
8.2.5 用 zip_longest() 和 zip() 合并迭代器
8.2.6 用 compress() 过滤
8.2.7 用 islice() 选取子集
8.2.8 用 dropwhile() 和 takewhile() 过滤状态
8.2.9 基于 filterfalse() 和 filter() 的两种过滤方法
8.2.10 将 starmap() 和 map() 应用于数据
8.3 使用 tee() 函数克隆迭代器
8.4 itertools 模块代码范例
8.5 小结
第 9 章 高级 itertools 技术
9.1 笛卡儿积
9.2 对积进行归约
9.2.1 计算距离
9.2.2 获得所有像素和颜色
9.2.3 性能分析
9.2.4 重构问题
9.2.5 合并两种变换
9.3 排列集合元素
9.4 生成所有组合
9.5 代码范例
9.6 小结
第 10 章 functools 模块
10.1 函数工具
10.2 使用 lru_cache 保存已有计算结果
10.3 使用 total_ordering 定义类
定义数字类
10.4 使用 partial() 函数应用部分参数
10.5 使用 reduce() 函数归约数据集
10.5.1 合并 map() 和 reduce()
10.5.2 使用 reduce() 函数和 partial() 函数
10.5.3 使用 map() 函数和 reduce() 函数清洗数据
10.5.4 使用 groupby() 函数和 reduce() 函数
10.6 小结
第 11 章 装饰器设计技术
11.1 作为高阶函数的装饰器
使用 functools 的 update_wrapper() 函数
11.2 横切关注点
11.3 复合设计
预处理不良数据
11.4 向装饰器添加参数
11.5 实现更复杂的装饰器
11.6 复杂设计注意事项
11.7 小结
第 12 章 multiprocessing 和 threading 模块
12.1 函数式编程和并发
12.2 并发的意义
12.2.1 边界条件
12.2.2 进程或线程间共享资源
12.2.3 从何处受益
12.3 使用多进程池和任务
12.3.1 处理大量大型文件
12.3.2 解析日志文件之收集行数据
12.3.3 解析日志行为命名元组
12.3.4 解析 Access 对象的其他字段
12.3.5 过滤访问细节
12.3.6 分析访问细节
12.3.7 完整的分析过程
12.4 使用多进程池进行并发处理
12.4.1 使用 apply() 发送单个请求
12.4.2 使用 map_async()、starmap_async() 和 starmap_async() 等函数
12.4.3 更复杂的多进程架构
12.4.4 使用 concurrent.futures 模块
12.4.5 使用 concurrent.futures 线程池
12.4.6 使用 threading 模块和 queue 模块
12.4.7 设计并发处理
12.5 小结
第 13 章 条件表达式和 operator 模块
13.1 条件表达式求值
13.1.1 使用非严格字典规则
13.1.2 过滤 True 条件表达式
13.1.3 寻找匹配模式
13.2 使用 operator 模块代替匿名函数
使用高阶函数获取命名属性
13.3 运算符的星号映射
13.4 使用 operator 模块函数进行归约
13.5 小结
第 14 章 PyMonad 库
14.1 下载和安装
14.2 函数式复合和柯里化
14.2.1 使用柯里化的高阶函数
14.2.2 避易就难的柯里化
14.3 函数式复合和 PyMonad*运算符
14.4 函子和应用型函子
使用惰性 List() 函子
14.5 单子的 bind() 函数和>>运算符
14.6 模拟实现单子
14.7 单子的其他特性
14.8 小结
第 15 章 Web 服务的函数式设计方法
15.1 HTTP“请求-响应”模型
15.1.1 通过 cookie 注入状态
15.1.2 函数式设计的服务器考量
15.1.3 深入研究函数式视图
15.1.4 嵌套服务
15.2 WSGI 标准
15.2.1 在 WSGI 处理期间抛出异常
15.2.2 实用的 WSGI 应用程序
15.3 将 Web 服务定义为函数
15.3.1 创建 WSGI 应用程序
15.3.2 获取原始数据
15.3.3 运用过滤器
15.3.4 序列化结果
15.3.5 序列化数据为 JSON 或 CSV 格式
15.3.6 序列化数据为 XML 格式
15.3.7 序列化数据为 HTML
15.4 跟踪使用情况
15.5 小结
第 16 章 优化与改进
16.1 记忆化和缓存
16.2 指定记忆化
16.3 尾递归优化
16.4 优化存储
16.5 优化精度
根据用户需求降低精度
16.6 案例研究:卡方决策
16.6.1 使用 Counter 对象过滤和约分原始数据
16.6.2 读取汇总信息
16.6.3 Counter 对象的求和计算
16.6.4 Counter 对象的概率计算
16.7 计算期望值并显示列联表
16.7.1 计算卡方值
16.7.2 计算卡方阈值
16.7.3 计算不完全伽马函数
16.7.4 计算完全伽马函数
16.7.5 计算随机分布的概率
16.8 函数式编程设计模式
16.9 小结
下载地址:https://www.wenjiangs.com/wp-content/uploads/2024/01/9SN0kERSXPeKeVcN.zip
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: Python 高性能编程 PDF 文档
下一篇: 白帽子讲 Web 安全 PDF 文档
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论