目录¶
第一部分 序幕¶
第1章 Python 数据模型¶
Abstract
- 1.1 一摞Python风格的纸牌
- 1.2 如何使用特殊方法
- 1.3 特殊方法一览
- 1.4 为什么len不是普通方法
- 1.5 本章小结
- 1.6 延伸阅读
第二部分 数据结构¶
第2章 序列构成的数组¶
Abstract
- 2.1 内置序列类型概览
- 2.2 列表推导和生成器表达式
- 2.3 元组不仅仅是不可变列表
- 2.4 切片
- 2.5 对序列使用+和*
- 2.6 序列的增量赋值
- 2.7 list.sort方法和内置函数sorted
- 2.8 用bisect来管理已排序的序列
- 2.9 当列表不是首选时
- 2.10 本章小结
- 2.11 延伸阅读
第3章 字典和集合¶
Abstract
- 3.1 泛映射类型
- 3.2 字典推导
- 3.3 常见的映射方法
- 3.4 映射的弹性键查询
- 3.5 字典的变种
- 3.6 子类化UserDict
- 3.7 不可变映射类型
- 3.8 集合论
- 3.9 dict和set的背后
- 3.10 本章小结
- 3.11 延伸阅读
第4章 文本和字节序列¶
Abstract
- 4.1 字符问题
- 4.2 字节概要
- 4.3 基本的编解码器
- 4.4 了解编解码问题
- 4.5 处理文本文件
- 4.6 为了正确比较而规范化Unicode字符串
- 4.7 Unicode文本排序
- 4.8 Unicode数据库
- 4.9 支持字符串和字节序列的双模式API
- 4.10 本章小结
- 4.11 延伸阅读
第三部分 把函数视作对象¶
第5章 一等函数¶
Abstract
- 5.1 把函数视作对象
- 5.2 高阶函数
- 5.3 匿名函数
- 5.4 可调用函数
- 5.5 用户定义的可调用类型
- 5.6 函数内省
- 5.7 从定位参数到仅限关键字参数
- 5.8 获取关于参数的信息
- 5.9 函数注解
- 5.10 支持函数式编程的信息
- 5.12 延伸阅读
第6章 使用一等函数实现设计模式¶
Abstract
- 6.1 案例分析:重构“策略”模式
- 6.2 “命令”模式
- 6.3 本章小结
- 6.4 延伸阅读
第7章 函数装饰器和闭包¶
Abstract
- 7.1 装饰器基础知识
- 7.2 Python何时执行装饰器
- 7.3 使用装饰器改进“策略”模式
- 7.4 变量作用域规则
- 7.5 闭包
- 7.6 nonlocal声明
- 7.7 实现一个简单的装饰器
- 7.8 标准库中的装饰器
- 7.9 叠放装饰器
- 7.10 参数化装饰器
- 7.11 本章小结
- 7.12 延伸阅读
第四部分 面向对象惯用法¶
第8章 对象引用、可变性和垃圾回收¶
Abstract
- 8.1 变量不是盒子
- 8.2 标识、相等性和别名
- 8.3 默认做浅复制
- 8.4 函数的参数作为引用时
- 8.5 del和垃圾回收
- 8.6 弱引用
- 8.7 Python对不可变类型施加的把戏
- 8.9 延伸阅读
第9章 符合Python风格的对象¶
Abstract
- 9.1 对象表示形式
- 9.2 再谈向量类
- 9.3 备选构造函数
- 9.4 classmethod与staticmethod
- 9.5 格式化显示
- 9.6 可散列的Vector2d
- 9.7 Python的私有属性和“受保护的”属性
- 9.8 使用__slots__类属性节省空间
- 9.9 覆盖类属性
- 9.10 本章小结
- 9.11 延伸阅读
第10章 序列的修改、散列和切片¶
Abstract
- 10.1 Vector类:用户定义的序列类型
- 10.2 Vector类第1版:与Vector2d类兼容
- 10.3 协议和鸭子类型
- 10.4 Vector类第2版:可切片的序列
- 10.5 Vector类第3版:动态存取属性
- 10.6 Vector类第4版:散列和快速等值测试
- 10.7 Vector类第5版:格式化
- 10.8 本章小结
- 10.9 延伸阅读
第11章 接口:从协议到抽象基类¶
Abstract
- 11.1 Python文件中的接口和协议
- 11.2 Python喜欢序列
- 11.3 使用猴子补丁在运行时实现协议
- 11.4 Alex Martelli的水禽
- 11.5 定义抽象基类的子类
- 11.6 标准库中的抽象基类
- 11.7 定义并使用一个抽象基类
- 11.8 Tombola子类的测试方法
- 11.9 Python使用register的方式
- 11.10 鹅的行为有可能像鸭子
- 11.11 本章小结
- 11.12 延伸阅读
第12章 继承的优缺点¶
Abstract
- 12.1 子类化内置类型很麻烦
- 12.2 多重继承和方法解析顺序
- 12.3 多重继承的真实应用
- 12.4 处理多重继承
- 12.5 一个现代示例:Django通用视图中的混入
- 12.6 本章小结
- 12.7 延伸阅读
第13章 正确重载运算符¶
Abstract
- 13.1 运算符重载基础
- 13.2 一元运算符
- 13.3 重载向量加法运算符+
- 13.4 重载标量乘法运算符*
- 13.5 众多比较运算符
- 13.6 增量赋值运算符
- 13.7 本章小结
- 13.8 延伸阅读
第五部分 控制流程¶
第14章 可迭代的对象、迭代器和生成器¶
Abstract
- 14.1 Sentence类第1版:单词序列
- 14.2 可迭代对象与迭代器的对比
- 14.3 Sentence类第2版:典型的迭代器
- 14.4 Sentence类第3版:生成器函数
- 14.5 Sentence类第4版:惰性实现
- 14.6 Sentence类第5版:生成器表达式
- 14.7 何时使用生成器表达式
- 14.8 另一个示例:等差数列生成器
- 14.9 标准库中的生成器函数
- 14.10 Python3.3中新出现的句法:yield from
- 14.11 可迭代的归约函数
- 14.12 深入分析iter函数
- 14.13 案例分析:在数据库转换工具中使用生成器
- 14.14 把生成器当成协程
- 14.15 本章小结
- 14.16 延伸阅读
第15章 上下文管理器和else块¶
Abstract
- 15.1 先做这个,再做那个:if语句之外的else块
- 15.2 上下文管理器和with块
- 15.3 contextlib模块中的实用工具
- 15.4 使用@contextmanager
- 15.5 本章小结
- 15.6 延伸阅读
第16章 协程¶
Abstract
- 16.1 生成器如何进化成协程
- 16.2 用作协程的生成器的基本行为
- 16.3 示例:使用协程计算移动平均值
- 16.4 预激协程的装饰器
- 16.5 终止协程和异常处理
- 16.6 让协程返回值
- 16.7 使用yield from
- 16.8 yield from的意义
- 16.9 使用案例:使用协程做离散事件仿真
- 16.10 本章小结
- 16.11 延伸阅读
第17章 使用future处理并发¶
Abstract
- 17.1 示例:网络下载的三种风格
- 17.2 阻塞型IO和GIL
- 17.3 使用concurrent.futures模块启动进程
- 17.4 实验Executor.map方法
- 17.5 显示下载进度条并处理错误
- 17.6 本章小结
- 17.7 延伸阅读
第18章 使用asyncio包处理并发¶
Abstract
- 18.1 线程和协程对比
- 18.2 使用asyncio和aiohttp包下载
- 18.3 避免阻塞型调用
- 18.4 改进asyncio下载脚本
- 18.5 从回调到期物和协程
- 18.6 使用asyncio包编写服务器
- 18.7 本章小结
- 18.8 延伸阅读
第六部分 元编程¶
第19章 动态属性和特性¶
Abstract
- 19.1 使用动态属性转换数据
- 19.2 使用特性验证属性
- 19.3 特性全解析
- 19.4 定义一个特性工厂函数
- 19.5 处理属性删除操作
- 19.6 处理属性的重要属性和函数
- 19.7 本章小结
- 19.8 延伸阅读
第20章 属性描述符¶
Abstract
- 20.1 描述符示例:验证属性
- 20.2 覆盖型与非覆盖型描述符对比
- 20.3 方法是描述符
- 20.4 描述符用法建议
- 20.5 描述符的文档字符串和覆盖删除操作
- 20.6 本章小结
- 20.7 延伸阅读
第21章 类元编程¶
Abstract
- 21.1 类工厂函数
- 21.2 定制描述符的类装饰器
- 21.3 导入时和运行时比较
- 21.4 元类基础知识
- 21.5 定制描述符的元类
- 21.6 元类的特殊方法__prepare__
- 21.7 类作为对象
- 21.8 本章小结
- 21.9 延伸阅读