图书目录

目    录

第1章  原理与哲学   1

1.1  Python之禅   1

1.1.1  优美胜于丑陋   3

1.1.2  明了胜于晦涩   3

1.1.3  简洁胜于复杂   4

1.1.4  复杂胜于难以理解   5

1.1.5  扁平胜于嵌套   5

1.1.6  宽松胜于紧凑   6

1.1.7  可读性很重要   7

1.1.8  即便是特例,也不可违背这些规则   8

1.1.9  实用性胜于纯粹性   8

1.1.10  错误永远不应该悄无声息地过去   9

1.1.11  除非明确地沉默   10

1.1.12  面对模棱两可的情况,拒绝猜测的诱惑   11

1.1.13  应该有一种(最好只有一种)显而易见的方法   12

1.1.14  尽管这种方式起初可能并不明显,除非你是荷兰人   13

1.1.15  做比不做要好   13

1.1.16  不假思索就动手还不如不做   14

1.1.17  如果实现难以解释,那就是一个糟糕的想法   14

1.1.18  如果实现容易解释,则可能是一个好主意   14

1.1.19  命名空间是一个很棒的想法,让我们做更多这样的事情吧   15

1.2  不要重复自己   15

1.3  松耦合   16

1.4  武士原则   16

1.5  帕累托原则   17

1.6  稳健性原则   17

1.7  向后兼容性   19

1.8  小结   19

第2章  基础知识   20

2.1  总体概念   20

2.1.1  迭代   20

2.1.2  缓存   22

2.1.3  透明度   23

2.2  流程控制   23

2.2.1  捕获异常   24

2.2.2  异常链   27

2.2.3  当一切顺利的时候   29

2.2.4  继续执行,无论异常如何   31

2.2.5  优化循环   32

2.2.6  with语句   33

2.2.7  条件表达式   34

2.3  迭代   36

2.3.1  序列解包   37

2.3.2  列表解析式   39

2.3.3  生成器表达式   40

2.3.4  集合解析式   41

2.3.5  字典解析式   41

2.3.6  将迭代器链接在一起   42

2.3.7  将迭代器压缩在一起   42

2.4  容器数据类型   43

2.4.1  集合   43

2.4.2  命名元组   48

2.4.3  有序字典   48

2.4.4  带有默认值的字典   49

2.5  导入代码   50

2.5.1  回退(备用)导入   50

2.5.2  从即将发布的版本中导入   51

2.5.3  使用__all__进行自定义导入   52

2.5.4  相对导入   54

2.5.5  __import__()函数   54

2.5.6  importlib模块   57

2.6  令人兴奋的Python扩展:NIST的随机数信标   57

2.6.1  如何安装NIST信标库   58

2.6.2  示例:获取值   58

2.6.3  示例:模拟抛硬币并记录每次正反面的结果   59

2.7  小结   59

第3章  函数   60

3.1  参数   61

3.1.1  规划时的灵活性   61

3.1.2  可变位置参数   62

3.1.3  可变关键字参数   63

3.1.4  组合不同类型的参数   64

3.1.5  调用具有可变参数的函数   67

3.1.6  传递参数   67

3.1.7  自省   69

3.1.8  示例:标识参数值   70

3.1.9  示例:一个更简洁的版本   72

3.1.10  示例:验证参数   75

3.2  装饰器   76

3.2.1  闭包   78

3.2.2  包装器   80

3.2.3  带参数的装饰器   81

3.2.4  带参数或不带参数的装饰器   83

3.2.5  示例:记忆化   85

3.2.6  示例:用于创建装饰器的装饰器   86

3.3  函数注解   88

3.3.1  示例:类型安全   89

3.3.2  提取样板   97

3.3.3  示例:类型强制转换   100

3.3.4  用装饰器进行注解   102

3.3.5  示例:将类型安全作为装饰器   102

3.4  生成器   107

3.5  lambda   109

3.6  自省   110

3.6.1  标识对象类型   111

3.6.2  模块和软件包   112

3.6.3  文档字符串   112

3.7  令人兴奋的Python扩展:统计   115

3.7.1  安装Pandas和matplotlib   115

3.7.2  创建文本文件   115

3.7.3  使用Pandas显示数据   116

3.7.4  进行一些数据分析   116

3.7.5  使用matplotlib进行绘图   117

3.7.6  图表的类型   117

3.7.7  将matplotlib与Pandas结合起来   118

3.8  小结   118

第4章  类   119

4.1  继承   119

4.1.1  多重继承   122

4.1.2  方法解析顺序   123

4.1.3  示例:C3算法   127

4.1.4  使用super()函数将控制权传递给其他类   134

4.1.5  自省   137

4.2  如何创建类   139

4.2.1  在运行时创建类   140

4.2.2  元类   141

4.2.3  示例:插件框架   142

4.2.4  控制命名空间   145

4.3  成员变量   147

4.3.1  属性   147

4.3.2  描述器   149

4.4  方法   152

4.4.1  非绑定方法   152

4.4.2  绑定方法   153

4.5  魔术方法   156

4.5.1  创建实例   157

4.5.2  示例:自动化子类   158

4.5.3  处理成员变量   159

4.5.4  字符串表示   162

4.6  令人兴奋的Python扩展:迭代器   164

4.7  小结   166

第5章  通用协议   167

5.1  基本运算   167

5.1.1  数学运算   169

5.1.2  按位运算   173

5.1.3  运算符的变体   175

5.2  数字   177

5.2.1  符号运算   180

5.2.2  比较运算   180

5.3  可迭代对象   181

5.4  序列   186

5.5  映射   191

5.6  _call_()方法   192

5.7  上下文管理器   193

5.8  令人兴奋的Python扩展:Scrapy   195

5.8.1  安装Scrapy   196

5.8.2  运行Scrapy   196

5.8.3  项目设置   196

5.8.4  使用Scrapy获取Web数据   197

5.8.5  通过Scrapy浏览网页   198

5.8.6  shell选项   198

5.9  小结   199

第6章  对象管理   200

6.1  命名空间字典   201

6.1.1  示例:Borg模式   201

6.1.2  示例:自缓存属性   205

6.2  垃圾回收   209

6.2.1  引用计数   210

6.2.2  循环引用   211

6.2.3  弱引用   214

6.3  Python对象的序列化   216

6.4  复制   221

6.4.1  浅层复制   222

6.4.2  深层复制   224

6.5  令人兴奋的Python扩展:Beautiful Soup   226

6.5.1  安装Beautiful Soup   226

6.5.2  使用Beautiful Soup   226

6.6  小结   227

第7章  字符串   228

7.1  字节字符串   228

7.1.1  借助chr()和ord()进行简单的转换   229

7.1.2  借助struct模块进行复杂的转换   230

7.2  文本   233

7.2.1  Unicode   234

7.2.2  编码   234

7.3  简单的替换   236

7.4  格式化   238

7.4.1  在对象中查找值   240

7.4.2  区分字符串类型   240

7.4.3  标准格式规范   240

7.4.4  为文本文档制作目录   242

7.4.5  自定义格式规范   244

7.5  令人兴奋的Python扩展:feedparser库   245

7.5.1  如何安装feedparser库   245

7.5.2  如何使用feedparser库   245

7.6  小结   246

第8章  文档的编写   247

8.1  恰当地命名   247

8.2  注释   248

8.3  文档字符串   249

8.3.1  描述函数的作用   250

8.3.2  解释参数   250

8.3.3  返回值   250

8.3.4  包含预期的异常   251

8.4  代码之外的文档   251

8.4.1  安装与配置   251

8.4.2  教程   251

8.4.3  参考文档   252

8.5  用于编写文档的实用工具   252

8.5.1  格式化   253

8.5.2  链接   254

8.5.3  Sphinx   256

8.6  令人兴奋的Python扩展:NumPy   256

8.6.1  安装NumPy   256

8.6.2  使用NumPy   257

8.6.3  使用NumPy数组   258

8.6.4  统计度量   258

8.7  小结   259

第9章  测试   260

9.1  测试驱动开发   260

9.2  doctest   261

9.2.1  格式化代码   261

9.2.2  呈现输出   262

9.2.3  与文档集成   263

9.2.4  运行测试   263

9.3  unittest模块   265

9.3.1  初始化配置   265

9.3.2  编写测试   266

9.3.3  其他比较   270

9.3.4  测试字符串和其他序列内容   270

9.3.5  测试异常   271

9.3.6  测试对象标识   273

9.3.7  释放资源   273

9.4  提供自定义的测试类   274

9.5  令人兴奋的Python扩展:Pillow库   274

9.5.1  如何安装Pillow库   275

9.5.2  图像显示:确定文件的大小和类型并显示   275

9.5.3  图像处理:裁剪图像的一部分   275

9.5.4  图像处理:改变图像的方向   276

9.5.5  图像处理:滤镜   276

9.6  小结   276

第10章  发布   277

10.1  许可证   277

10.1.1  GNU通用公共许可证   277

10.1.2  Affero通用公共许可证   279

10.1.3  GNU 宽通用公共许可证   279

10.1.4  伯克利软件发行许可证   280

10.1.5  其他许可证   280

10.2  打包   281

10.2.1  setup.py   282

10.2.2  MANIFEST.in   284

10.2.3  sdist命令   285

10.3  发布   286

10.4  令人兴奋的Python扩展:secrets模块   288

10.4.1  随机数   288

10.4.2  密码生成器   288

10.5  小结   289

第11章  构建CSV框架sheets   290

11.1  构建声明性框架   291

11.1.1  声明性编程简介   291

11.1.2  是否构建声明性框架   292

11.2  构建框架   293

11.2.1  管理选项   294

11.2.2  定义字段   297

11.2.3  将字段附加到类   298

11.2.4  添加元类   300

11.2.5  整合   303

11.3  字段排序   304

11.3.1  DeclarativeMeta.__prepare__()   305

11.3.2  Column.__init__()   307

11.3.3  Column.__new__()   310

11.3.4  CounterMeta.__call__()   311

11.3.5  挑选选项   313

11.4  构建字段库   313

11.4.1  StringField(字符串字段)   315

11.4.2  IntegerColumn(整数列)   315

11.4.3  FloatColumn(浮点数列)   316

11.4.4  DecimalColumn(小数列)   316

11.4.5  DateColumn(日期列)   317

11.5  回到CSV   321

11.5.1  检查参数   322

11.5.2  填充值   324

11.5.3  读取器   327

11.5.4  写入器   331

11.6  小结   334