وبلاگ بلیان

流畅的Python 文字版 可编辑

معرفی کتاب «流畅的Python 文字版 可编辑» نوشتهٔ [巴西] Luciano Ramalho، منتشرشده توسط نشر 人民邮电出版社 در سال 2017. این کتاب در فرمت pdf، زبان zh ارائه شده است. «流畅的Python 文字版 可编辑» در دستهٔ بدون دسته‌بندی قرار دارد.

书签已装载, 书签制作方法请找 yjyouaremysunshine@163.com 完全免费 【技术大咖推荐】 “很荣幸担任这本优秀图书的技术审校。这本书能帮助很多中级Python程序员掌握这门语言,我也从中学到了相当多的知识!”——Alex Martelli,Python软件基金会成员 “对于想要扩充知识的中级和高级Python程序员来说,这本书是充满了实用编程技巧的宝藏。”——Daniel Greenfeld和Audrey Roy Greenfeld,Two Scoops of Django作者 【本书特色】 本书由奋战在Python开发一线近20年的Luciano Ramalho执笔,Victor Stinner、Alex Martelli等Python大咖担纲技术审稿人,从语言设计层面剖析编程细节,兼顾Python 3和Python 2,告诉你Python中不亲自动手实践就无法理解的语言陷阱成因和解决之道,教你写出风格地道的Python代码。 ● Python数据模型:理解为什么特殊方法是对象行为一致的关键。 ● 数据结构:充分利用内置类型,理解Unicode文本和字节二象性。 ● 把函数视作对象:把Python函数视作一等对象,并了解这一点对流行的设计模式的影响。 ● 面向对象习惯用法:通过构建类学习引用、可变性、接口、运算符重载和多重继承。 ● 控制流程:学习使用上下文管理器、生成器、协程,以及通过concurrent.futures和asyncio包实现的并发。 ● 元编程:理解特性、描述符、类装饰器和元类的工作原理。 【主要内容】 本书致力于帮助Python开发人员挖掘这门语言及相关程序库的优秀特性,避免重复劳动,同时写出简洁、流畅、易读、易维护,并且具有地道Python风格的代码。本书尤其深入探讨了Python语言的高级用法,涵盖数据结构、Python风格的对象、并行与并发,以及元编程等不同的方面。 本书适合中高级Python软件开发人员阅读参考。 【译者简介】 安道 专注于现代计算机技术的自由翻译,译有《Flask Web 开发》《Python 网络编程攻略》《Ruby on Rails 教程》等书。 个人网站:http://about.ac/。 吴珂 现为Airbnb公司软件工程师,所在团队主要负责开发和维护各类可伸缩、高性能服务,并在Airbnb内推广面向服务的系统架构。在分布式系统、云存储服务和跨平台SDK开发,以及大规模数据处理等方面有多年经验。 版权声明 17 O'Reilly Media, Inc. 介绍 18 业界评论 19 前言 21 目标读者 23 非目标读者 24 本书的结构 25 以实践为基础 28 硬件 29 杂谈:个人的一点看法 30 Python术语表 31 Python版本表 32 排版约定 33 使用代码示例 34 Safari® Books Online 35 联系我们 36 致谢 37 电子书 40 第一部分 序幕 41 第 1 章 Python 数据模型 42 1.1 一摞Python风格的纸牌 45 1.2 如何使用特殊方法 50 1.2.1 模拟数值类型 50 1.2.2 字符串表示形式 53 1.2.3 算术运算符 54 1.2.4 自定义的布尔值 55 1.3 特殊方法一览 57 1.4 为什么len不是普通方法 61 1.5 本章小结 62 1.6 延伸阅读 63 第二部分 数据结构 66 第 2 章 序列构成的数组 67 2.1 内置序列类型概览 68 2.2 列表推导和生成器表达式 70 2.2.1 列表推导和可读性 70 2.2.2 列表推导同filter和map的比较 72 2.2.3 笛卡儿积 73 2.2.4 生成器表达式 75 2.3 元组不仅仅是不可变的列表 77 2.3.1 元组和记录 77 2.3.2 元组拆包 78 2.3.3 嵌套元组拆包 80 2.3.4 具名元组 82 2.3.5 作为不可变列表的元组 83 2.4 切片 87 2.4.1 为什么切片和区间会忽略最后一个元素 87 2.4.2 对对象进行切片 88 2.4.3 多维切片和省略 89 2.4.4 给切片赋值 90 2.5 对序列使用+和* 92 建立由列表组成的列表 92 2.6 序列的增量赋值 95 一个关于+=的谜题 96 2.7 list.sort方法和内置函数sorted 100 2.8 用bisect来管理已排序的序列 103 2.8.1 用bisect来搜索 103 2.8.2 用bisect.insort插入新元素 106 2.9 当列表不是首选时 108 2.9.1 数组 108 2.9.2 内存视图 113 2.9.3 NumPy和SciPy 115 2.9.4 双向队列和其他形式的队列 118 2.10 本章小结 123 2.11 延伸阅读 125 第 3 章 字典和集合 131 3.1 泛映射类型 132 3.2 字典推导 135 3.3 常见的映射方法 137 用setdefault处理找不到的键 139 3.4 映射的弹性键查询 143 3.4.1 defaultdict:处理找不到的键的一个选择 143 3.4.2 特殊方法__missing__ 145 3.5 字典的变种 149 3.6 子类化UserDict 151 3.7 不可变映射类型 154 3.8 集合论 156 3.8.1 集合字面量 158 3.8.2 集合推导 159 3.8.3 集合的操作 160 3.9 dict和set的背后 164 3.9.1 一个关于效率的实验 164 3.9.2 字典中的散列表 167 3.9.3 dict的实现及其导致的结果 171 3.9.4 set的实现以及导致的结果 174 3.10 本章小结 176 3.11 延伸阅读 177 第 4 章 文本和字节序列 180 4.1 字符问题 182 4.2 字节概要 184 结构体和内存视图 187 4.3 基本的编解码器 189 4.4 了解编解码问题 192 4.4.1 处理UnicodeEncodeError 192 4.4.2 处理UnicodeDecodeError 193 4.4.3 使用预期之外的编码加载模块时抛出的SyntaxError 195 4.4.4 如何找出字节序列的编码 196 4.4.5 BOM:有用的鬼符 197 4.5 处理文本文件 199 编码默认值:一团糟 202 4.6 为了正确比较而规范化Unicode字符串 207 4.6.1 大小写折叠 210 4.6.2 规范化文本匹配实用函数 210 4.6.3 极端“规范化”:去掉变音符号 212 4.7 Unicode文本排序 217 使用Unicode排序算法排序 219 4.8 Unicode数据库 221 4.9 支持字符串和字节序列的双模式API 224 4.9.1 正则表达式中的字符串和字节序列 224 4.9.2 os函数中的字符串和字节序列 226 4.10 本章小结 229 4.11 延伸阅读 231 第三部分 把函数视作对象 237 第 5 章 一等函数 238 5.1 把函数视作对象 239 5.2 高阶函数 241 map、filter和reduce的现代替代品 242 5.3 匿名函数 245 5.4 可调用对象 247 5.5 用户定义的可调用类型 249 5.6 函数内省 251 5.7 从定位参数到仅限关键字参数 254 5.8 获取关于参数的信息 257 5.9 函数注解 263 5.10 支持函数式编程的包 265 5.10.1 operator模块 265 5.10.2 使用functools.partial冻结参数 269 5.11 本章小结 272 5.12 延伸阅读 273 第 6 章 使用一等函数实现设计模式 278 6.1 案例分析:重构“策略”模式 280 6.1.1 经典的“策略”模式 280 6.1.2 使用函数实现“策略”模式 285 6.1.3 选择最佳策略:简单的方式 288 6.1.4 找出模块中的全部策略 290 6.2 “命令”模式 292 6.3 本章小结 295 6.4 延伸阅读 296 第 7 章 函数装饰器和闭包 299 7.1 装饰器基础知识 301 7.2 Python何时执行装饰器 303 7.3 使用装饰器改进“策略”模式 306 7.4 变量作用域规则 308 7.5 闭包 312 7.6 nonlocal声明 316 7.7 实现一个简单的装饰器 319 工作原理 320 7.8 标准库中的装饰器 323 7.8.1 使用functools.lru_cache做备忘 323 7.8.2 单分派泛函数 326 7.9 叠放装饰器 330 7.10 参数化装饰器 331 7.10.1 一个参数化的注册装饰器 331 7.10.2 参数化clock装饰器 334 7.11 本章小结 338 7.12 延伸阅读 339 第四部分 面向对象惯用法 344 第 8 章 对象引用、可变性和垃圾回收 345 8.1 变量不是盒子 346 8.2 标识、相等性和别名 348 8.2.1 在==和is之间选择 350 8.2.2 元组的相对不可变性 350 8.3 默认做浅复制 353 为任意对象做深复制和浅复制 356 8.4 函数的参数作为引用时 359 8.4.1 不要使用可变类型作为参数的默认值 360 8.4.2 防御可变参数 362 8.5 del和垃圾回收 366 8.6 弱引用 369 8.6.1 WeakValueDictionary简介 370 8.6.2 弱引用的局限 373 8.7 Python对不可变类型施加的把戏 374 8.8 本章小结 376 8.9 延伸阅读 378 第 9 章 符合Python风格的对象 384 9.1 对象表示形式 386 9.2 再谈向量类 387 9.3 备选构造方法 391 9.4 classmethod与staticmethod 392 9.5 格式化显示 394 9.6 可散列的Vector2d 399 9.7 Python的私有属性和“受保护的”属性 406 9.8 使用 __slots__ 类属性节省空间 409 __slots__ 的问题 411 9.9 覆盖类属性 413 9.10 本章小结 416 9.11 延伸阅读 418 第 10 章 序列的修改、散列和切片 423 10.1 Vector类:用户定义的序列类型 425 10.2 Vector类第1版:与Vector2d类兼容 426 10.3 协议和鸭子类型 430 10.4 Vector类第2版:可切片的序列 432 10.4.1 切片原理 433 10.4.2 能处理切片的__getitem__方法 435 10.5 Vector类第3版:动态存取属性 438 10.6 Vector类第4版:散列和快速等值测试 443 10.7 Vector类第5版:格式化 451 10.8 本章小结 459 10.9 延伸阅读 461 第 11 章 接口:从协议到抽象基类 467 11.1 Python文化中的接口和协议 469 11.2 Python喜欢序列 472 11.3 使用猴子补丁在运行时实现协议 475 11.4 Alex Martelli的水禽 478 11.5 定义抽象基类的子类 484 11.6 标准库中的抽象基类 487 11.6.1 collections.abc模块中的抽象基类 487 11.6.2 抽象基类的数字塔 489 11.7 定义并使用一个抽象基类 491 11.7.1 抽象基类句法详解 496 11.7.2 定义Tombola抽象基类的子类 497 11.7.3 Tombola的虚拟子类 500 11.8 Tombola子类的测试方法 505 11.9 Python使用register的方式 509 11.10 鹅的行为有可能像鸭子 510 11.11 本章小结 512 11.12 延伸阅读 515 第 12 章 继承的优缺点 522 12.1 子类化内置类型很麻烦 523 12.2 多重继承和方法解析顺序 527 12.3 多重继承的真实应用 535 12.4 处理多重继承 538 Tkinter好的、不好的和令人厌恶的方面 541 12.5 一个现代示例:Django通用视图中的混入 543 12.6 本章小结 547 12.7 延伸阅读 548 第 13 章 正确重载运算符 551 13.1 运算符重载基础 552 13.2 一元运算符 553 13.3 重载向量加法运算符+ 557 13.4 重载标量乘法运算符* 564 13.5 众多比较运算符 570 13.6 增量赋值运算符 576 13.7 本章小结 582 13.8 延伸阅读 584 第五部分 控制流程 589 第 14 章 可迭代的对象、迭代器和生成器 590 14.1 Sentence类第1版:单词序列 593 序列可以迭代的原因:iter函数 595 14.2 可迭代的对象与迭代器的对比 597 14.3 Sentence类第2版:典型的迭代器 603 把Sentence变成迭代器:坏主意 605 14.4 Sentence类第3版:生成器函数 607 生成器函数的工作原理 608 14.5 Sentence类第4版:惰性实现 613 14.6 Sentence类第5版:生成器表达式 615 14.7 何时使用生成器表达式 618 14.8 另一个示例:等差数列生成器 620 使用itertools模块生成等差数列 623 14.9 标准库中的生成器函数 625 14.10 Python 3.3中新出现的句法:yield from 638 14.11 可迭代的归约函数 640 14.12 深入分析iter函数 643 14.13 案例分析:在数据库转换工具中使用生成器 645 14.14 把生成器当成协程 648 14.15 本章小结 650 14.16 延伸阅读 651 第 15 章 上下文管理器和 else 块 658 15.1 先做这个,再做那个:if语句之外的else块 659 15.2 上下文管理器和with块 662 15.3 contextlib模块中的实用工具 668 15.4 使用@contextmanager 670 15.5 本章小结 675 15.6 延伸阅读 676 第 16 章 协程 679 16.1 生成器如何进化成协程 681 16.2 用作协程的生成器的基本行为 682 16.3 示例:使用协程计算移动平均值 687 16.4 预激协程的装饰器 689 16.5 终止协程和异常处理 692 16.6 让协程返回值 697 16.7 使用yield from 700 16.8 yield from的意义 708 16.9 使用案例:使用协程做离散事件仿真 716 16.9.1 离散事件仿真简介 716 16.9.2 出租车队运营仿真 717 16.10 本章小结 728 16.11 延伸阅读 730 第 17 章 使用期物处理并发 737 17.1 示例:网络下载的三种风格 738 17.1.1 依序下载的脚本 740 17.1.2 使用concurrent.futures模块下载 743 17.1.3 期物在哪里 744 17.2 阻塞型I/O和GIL 749 17.3 使用concurrent.futures模块启动进程 750 17.4 实验Executor.map方法 753 17.5 显示下载进度并处理错误 757 17.5.1 flags2系列示例处理错误的方式 762 17.5.2 使用futures.as_completed函数 765 17.5.3 线程和多进程的替代方案 769 17.6 本章小结 770 17.7 延伸阅读 771 第 18 章 使用 asyncio 包处理并发 776 18.1 线程与协程对比 779 18.1.1 asyncio.Future:故意不阻塞 786 18.1.2 从期物、任务和协程中产出 788 18.2 使用asyncio和aiohttp包下载 791 18.3 避免阻塞型调用 797 18.4 改进asyncio下载脚本 800 18.4.1 使用asyncio.as_completed函数 800 18.4.2 使用Executor对象,防止阻塞事件循环 807 18.5 从回调到期物和协程 810 每次下载发起多次请求 813 18.6 使用asyncio包编写服务器 817 18.6.1 使用asyncio包编写TCP服务器 817 18.6.2 使用aiohttp包编写Web服务器 823 18.6.3 更好地支持并发的智能客户端 828 18.7 本章小结 830 18.8 延伸阅读 832 第六部分 元编程 838 第 19 章 动态属性和特性 839 19.1 使用动态属性转换数据 840 19.1.1 使用动态属性访问JSON类数据 843 19.1.2 处理无效属性名 847 19.1.3 使用 __new__ 方法以灵活的方式创建对象 848 19.1.4 使用shelve模块调整OSCON数据源的结构 851 19.1.5 使用特性获取链接的记录 855 19.2 使用特性验证属性 864 19.2.1 LineItem类第1版:表示订单中商品的类 864 19.2.2 LineItem类第2版:能验证值的特性 865 19.3 特性全解析 868 19.3.1 特性会覆盖实例属性 869 19.3.2 特性的文档 872 19.4 定义一个特性工厂函数 874 19.5 处理属性删除操作 878 19.6 处理属性的重要属性和函数 880 19.6.1 影响属性处理方式的特殊属性 880 19.6.2 处理属性的内置函数 880 19.6.3 处理属性的特殊方法 882 19.7 本章小结 884 19.8 延伸阅读 885 第 20 章 属性描述符 890 20.1 描述符示例:验证属性 891 20.1.1 LineItem类第3版:一个简单的描述符 891 20.1.2 LineItem类第4版:自动获取储存属性的名称 897 20.1.3 LineItem类第5版:一种新型描述符 904 20.2 覆盖型与非覆盖型描述符对比 909 20.2.1 覆盖型描述符 911 20.2.2 没有 __get__ 方法的覆盖型描述符 912 20.2.3 非覆盖型描述符 913 20.2.4 在类中覆盖描述符 915 20.3 方法是描述符 916 20.4 描述符用法建议 919 20.5 描述符的文档字符串和覆盖删除操作 921 20.6 本章小结 923 20.7 延伸阅读 924 第 21 章 类元编程 926 21.1 类工厂函数 927 21.2 定制描述符的类装饰器 932 21.3 导入时和运行时比较 935 理解计算时间的练习 936 21.4 元类基础知识 941 理解元类计算时间的练习 943 21.5 定制描述符的元类 949 21.6 元类的特殊方法 __prepare__ 952 21.7 类作为对象 955 21.8 本章小结 957 21.9 延伸阅读 959 结语 963 延伸阅读 965 附录 A 辅助脚本 967 A.1 第3章:in运算符的性能测试 968 A.2 第3章:比较散列后的位模式 971 A.3 第9章:有或没有 __slots__ 时,RAM的用量 972 A.4 第14章:转换数据库的isis2json.py脚本 973 A.5 第16章:出租车队离散事件仿真 980 A.6 第17章:加密示例 985 A.7 第17章:flags2系列HTTP客户端示例 989 A.8 第19章:处理OSCON日程表的脚本和测试 995 Python 术语表 1001 作者简介 1020 关于封面 1021
دانلود کتاب 流畅的Python 文字版 可编辑