《Dive into Python》读书摘要

基本信息

  • 作者:Mark Pilgrim
  • 来源:云盘 /田浩然上传的资料/电子书/Python/Dive Into Python [miex.org].pdf
  • 页数:327页
  • 年份:2004年初版(Python 2.x)
  • 许可:GNU Free Documentation License v1.1
  • 类别:编程书籍 / Python

核心框架

本书是Python入门经典,以”案例驱动+深入原理”为特色。全书围绕一个核心项目——RSS聚合器(Atom/ RDF解析),逐步引入Python的各个核心概念。


目录结构

Part I: 基础语法

  • 第1章 安装Python — Windows/Mac/Linux多平台安装
  • 第2章 第一个Python程序 — 函数、文档字符串、对象、缩进、模块测试
  • 第3章 原生数据类型 — 字典、列表、元组、变量、字符串格式化、map/join/split
  • 第4章 内省的力量 — type/str/dir、可选参数、getattr、filter、lambda、列表推导
  • 第5章 面向对象 — 类定义、实例化、Special Method、私有函数
  • 第6章 异常与文件处理 — try/except、文件对象、for循环迭代、sys.modules、目录操作
  • 第7章 正则表达式 — 贪婪匹配、{n,m}语法、verbose模式、实战(地址/罗马数字/电话号码)
  • 第8章 HTML处理 — sgmllib、BaseHTMLProcessor、词法分析
  • 第9章 XML处理 — 包管理、解析、Unicode、元素搜索、属性访问

Part II: 进阶编程

  • 第10章 脚本与流 — 抽象输入源、stdin/stdout/stderr、缓存节点查找、命令行参数
  • 第11章 HTTP Web服务 — urllib/urllib2、HTTP特性、调试、User-Agent、ETag/Last-Modified、压缩数据
  • 第12章 SOAP Web服务 — SOAP库安装、WSDL、Google搜索API、调试技巧
  • 第13章 单元测试 — 罗马数字转换测试(TDD入门)
  • 第14章 测试驱动编程 — roman.py的分阶段实现
  • 第15章 重构 — 代码质量改进
  • 第16章 高级特性 — 装饰器、生成器、迭代器

核心知识点

1. 一切皆是对象(Everything Is an Object)

Python中变量不是”盒子”,而是”标签”。a = b = [] 时,a和b指向同一对象。

2. 缩进即语法

Python用缩进定义代码块,而非大括号。这是Python最显著的特征。

3. 文档字符串(Docstring)

def function_name(args):
    """This is a docstring."""
    pass

可通过 __doc__ 属性访问。

4. 测试模块的标准写法

if __name__ == '__main__':
    test()

5. 正则表达式核心概念

  • 贪婪匹配:默认尽可能多地匹配
  • {n,m}:指定匹配次数范围
  • (?aiLmsux):verbose模式,允许注释和空格

6. HTML/XML解析

  • sgmllib:Python标准库中的SGML解析器
  • BaseHTMLProcessor:基于sgmllib的HTML处理器基类
  • xml.dom.minidom / xml.sax:XML解析的两套API

7. HTTP客户端编程

  • urllib2.urlopen() 发送请求
  • Request 对象设置 headers(如 User-Agent)
  • GZip decompression 处理压缩响应
  • ETag / Last-Modified 实现条件请求

8. SOAP与WSDL

  • SOAP:Simple Object Access Protocol,基于XML的协议
  • WSDL:Web Services Description Language,描述服务接口
  • 实战:通过Google SOAP API搜索网页

9. TDD(测试驱动开发)

以罗马数字转换为案例,展示:

  • 先写失败的测试(RED)
  • 写最少代码使测试通过(GREEN)
  • 重构代码(REFACTOR)

重要代码模式

列表推导

results = [func(x) for x in items if condition(x)]

lambda + map/filter

squares = map(lambda x: x**2, range(10))
evens = filter(lambda x: x % 2 == 0, range(10))

文件迭代

for line in open('file.txt'):
    process(line)

异常链式捕获

try:
    do_something()
except TypeError:
    handle_type_error()
except ValueError:
    handle_value_error()
except:
    raise

版本说明

  • 本书针对 Python 2.x(2.3+),书中内容在Python 3中大部分仍然有效
  • Python 3的主要差异:print 改为函数、range 替代 xrange、字符串默认为Unicode
  • 建议配合Python 3官方文档阅读,核心概念完全相通

可行动点

  • 本项目RSS聚合器的设计思路(抽象输入源、流式处理)可应用于任何数据采集场景
  • TDD章节的罗马数字案例是理解测试驱动开发的最佳入门
  • HTTP/Web服务章节对理解现代API调用有直接参考价值