| 作者 |
| 丛书名 |
| 图灵程序设计丛书 |
| 出版社 |
| 人民邮电出版社 |
| ISBN |
| 9787115520173 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 Python具备函数式编程的许多核心特征,因此可以借鉴其他函数式语言的设计模式和编程技术,编写出简洁优雅的代码。本书首先介绍函数式编程的一般概念及特点,然后讲解迭代器、生成器表达式、内置函数、常用高阶函数、递归与归约、实用模块和装饰器的用法,以及避开Python严格求值顺序的变通方法、Web服务设计方法和一些优化技巧。 |
| 目录 |
| 前言 第 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 版权声明 |