python函数式编程 第2版 pdf_Python函数式编程 第2版

前言

第 1章 函数式编程概述 1

1.1 编程范式 1

1.2 细分过程范式 2

1.2.1 使用函数式范式 3

1.2.2 使用混合范式 5

1.2.3 对象的创建过程 6

1.2.4 乌龟塔 7

1.3 函数式编程经典示例 7

1.4 EDA 10

1.5 小结 10

第 2章 函数式编程的特点 11

2.1 头等函数 11

2.1.1 纯函数 12

2.1.2 高阶函数 13

2.2 不可变数据结构 13

2.3 严格求值与非严格求值 14

2.4 用递归代替循环语句 16

2.5 函数类型系统 19

2.6 回到最初 19

2.7 几个高级概念 20

2.8 小结 20

第3章 函数、迭代器和生成器 22

3.1 编写纯函数 23

3.2 函数作为头等对象 24

3.3 使用字符串 25

3.4 使用元组和命名元组 26

3.4.1 使用生成器表达式 27

3.4.2 生成器的局限 30

3.4.3 组合生成器表达式 31

3.5 使用生成器函数清洗原始数据 31

3.6 使用列表、字典和set 33

3.6.1 使用状态映射 36

3.6.2 使用bisect模块创建映射 37

3.6.3 使用有状态的set 38

3.7 小结 39

第4章 使用集合 40

4.1 函数分类概览 40

4.2 使用可迭代对象 41

4.2.1 解析XML文件 42

4.2.2 使用高级方法解析文件 43

4.2.3 组对序列元素 45

4.2.4 显式使用iter()函数 47

4.2.5 扩展简单循环 48

4.2.6 将生成器表达式应用于标量函数 51

4.2.7 用any()函数和all()函数进行归约 52

4.2.8 使用len()和sum() 54

4.2.9 使用汇总和计数进行统计分析 54

4.3 使用zip()函数实现结构化和平铺序列 56

4.3.1 将压缩序列解压 58

4.3.2 平铺序列 58

4.3.3 结构化一维序列 59

4.3.4 结构化一维序列的另一种方式 61

4.4 使用reversed()函数改变顺序 62

4.5 使用enumerate()函数包含下标值 63

4.6 小结 63

第5章 高阶函数 64

5.1 用max()函数和min()函数寻找极值 65

5.2 使用Python匿名函数 67

5.3 lambda与lambda算子 69

5.4 使用map()将函数应用于集合 69

5.5 使用map()函数处理多个序列 70

5.6 使用filter()函数接收或舍弃数据 72

5.7 使用filter()函数检测异常值 73

5.8 在iter()函数中使用哨兵值 74

5.9 使用sorted()函数将数据排序 75

5.10 编写高阶函数 75

5.11 编写高阶映射和过滤函数 76

5.11.1 拆包并映射数据 77

5.11.2 打包多项数据并映射 79

5.11.3 平铺数据并映射 80

5.11.4 过滤并结构化数据 81

5.12 编写生成器函数 83

5.13 使用可调用对象构建高阶函数 84

5.14 设计模式回顾 87

5.15 小结 88

第6章 递归与归约 89

6.1 简单数值递归 89

6.1.1 实现尾调用优化 90

6.1.2 保持递归形式 91

6.1.3 处理复杂的尾调用优化 92

6.1.4 使用递归处理集合 93

6.1.5 集合的尾调用优化 94

6.1.6 集合的归约与折叠:从多个到一个 95

6.2 group-by归约:从多到少 96

6.2.1 用Counter做映射 97

6.2.2 用排序构建映射 98

6.2.3 使用键值分组或者分区数据 99

6.2.4 编写更通用的group-by归约 102

6.2.5 编写高阶归约 103

6.2.6 编写文件解析器 104

6.3 小结 109

第7章 元组处理技术 110

7.1 使用元组收集数据 110

7.2 使用命名元组收集数据 112

7.3 使用函数构造器创建命名元组 115

7.4 使用多种元组结构代替状态类 115

7.4.1 赋等级值 118

7.4.2 用包装代替状态变化 120

7.4.3 以多次包装代替状态变化 121

7.4.4 计算斯皮尔曼等级顺序相关度 122

7.5 多态与类型匹配 123

7.6 小结 128

第8章 itertools模块 129

8.1 使用无限迭代器 130

8.1.1 用count()计数 130

8.1.2 使用实数参数计数 131

8.1.3 用cycle()循环迭代 132

8.1.4 用repeat()重复单个值 134

8.2 使用有限迭代器 135

8.2.1 用enumerate()添加序号 135

8.2.2 用accumulate()计算汇总值 137

8.2.3 用chain()组合多个迭代器 138

8.2.4 用groupby()切分迭代器 139

8.2.5 用zip_longest()和zip()合并迭代器 140

8.2.6 用compress()过滤 140

8.2.7 用islice()选取子集 141

8.2.8 用dropwhile()和takewhile()过滤状态 142

8.2.9 基于filterfalse()和filter()的两种过滤方法 143

8.2.10 将starmap()和map()应用于数据 144

8.3 使用tee()函数克隆迭代器 145

8.4 itertools模块代码范例 146

8.5 小结 147

第9章 高级itertools技术 148

9.1 笛卡儿积 148

9.2 对积进行归约 149

9.2.1 计算距离 150

9.2.2 获得所有像素和颜色 152

9.2.3 性能分析 153

9.2.4 重构问题 154

9.2.5 合并两种变换 155

9.3 排列集合元素 156

9.4 生成所有组合 157

9.5 代码范例 159

9.6 小结 160

第 10章 functools模块 161

10.1 函数工具 161

10.2 使用lru_cache保存已有计算结果 162

10.3 使用total_ordering定义类 163

10.4 使用partial()函数应用部分参数 166

10.5 使用reduce()函数归约数据集 167

10.5.1 合并map()和reduce() 168

10.5.2 使用reduce()函数和partial()函数 170

10.5.3 使用map()函数和reduce()函数清洗数据 170

10.5.4 使用groupby()函数和reduce()函数 171

10.6 小结 173

第 11章 装饰器设计技术 174

11.1 作为高阶函数的装饰器 174

11.2 横切关注点 178

11.3 复合设计 178

11.4 向装饰器添加参数 181

11.5 实现更复杂的装饰器 183

11.6 复杂设计注意事项 184

11.7 小结 187

第 12章 multiprocessing和threading模块 188

12.1 函数式编程和并发 188

12.2 并发的意义 189

12.2.1 边界条件 189

12.2.2 进程或线程间共享资源 190

12.2.3 从何处受益 191

12.3 使用多进程池和任务 191

12.3.1 处理大量大型文件 192

12.3.2 解析日志文件之收集行数据 193

12.3.3 解析日志行为命名元组 194

12.3.4 解析Access对象的其他字段 196

12.3.5 过滤访问细节 199

12.3.6 分析访问细节 200

12.3.7 完整的分析过程 201

12.4 使用多进程池进行并发处理 202

12.4.1 使用apply()发送单个请求 204

12.4.2 使用map_async()、starmap_async()和starmap_async()等函数 204

12.4.3 更复杂的多进程架构 205

12.4.4 使用concurrent.futures模块 205

12.4.5 使用concurrent.futures线程池 206

12.4.6 使用threading模块和queue模块 206

12.4.7 设计并发处理 207

12.5 小结 208

第 13章 条件表达式和operator模块 209

13.1 条件表达式求值 210

13.1.1 使用非严格字典规则 211

13.1.2 过滤True条件表达式 212

13.1.3 寻找匹配模式 213

13.2 使用operator模块代替匿名函数 214

13.3 运算符的星号映射 215

13.4 使用operator模块函数进行归约 217

13.5 小结 218

第 14章 PyMonad库 219

14.1 下载和安装 219

14.2 函数式复合和柯里化 220

14.2.1 使用柯里化的高阶函数 221

14.2.2 避易就难的柯里化 223

14.3 函数式复合和PyMonad*运算符 223

14.4 函子和应用型函子 224

14.5 单子的bind()函数和>>运算符 228

14.6 模拟实现单子 229

14.7 单子的其他特性 232

14.8 小结 233

第 15章 Web服务的函数式设计方法 234

15.1 HTTP“请求 响应”模型 234

15.1.1 通过cookie注入状态 236

15.1.2 函数式设计的服务器考量 236

15.1.3 深入研究函数式视图 237

15.1.4 嵌套服务 237

15.2 WSGI标准 238

15.2.1 在WSGI处理期间抛出异常 240

15.2.2 实用的WSGI应用程序 242

15.3 将Web服务定义为函数 242

15.3.1 创建WSGI应用程序 243

15.3.2 获取原始数据 245

15.3.3 运用过滤器 246

15.3.4 序列化结果 247

15.3.5 序列化数据为JSON或CSV格式 248

15.3.6 序列化数据为XML格式 249

15.3.7 序列化数据为HTML 250

15.4 跟踪使用情况 251

15.5 小结 252

第 16章 优化与改进 254

16.1 记忆化和缓存 254

16.2 指定记忆化 256

16.3 尾递归优化 257

16.4 优化存储 258

16.5 优化精度 259

16.6 案例研究:卡方决策 259

16.6.1 使用Counter对象过滤和约分原始数据 260

16.6.2 读取汇总信息 262

16.6.3 Counter对象的求和计算 263

16.6.4 Counter对象的概率计算 264

16.7 计算期望值并显示列联表 265

16.7.1 计算卡方值 267

16.7.2 计算卡方阈值 267

16.7.3 计算不完全伽马函数 268

16.7.4 计算完全伽马函数 270

16.7.5 计算随机分布的概率 271

16.8 函数式编程设计模式 273

16.9 小结 274

版权声明

你可能感兴趣的:(python函数式编程,第2版,pdf)