我以往学过很多种编程语言,唯独python学了以后迅速进入应用阶段,用起来得心应手。这里除了python本身易学易用外,我寻找到学习路径上的结点,然后发现了我熟练使用python的一个重要结点。
我在开始从《简明Python教程》入门。随后做过一些千行上下的小程序。随后也想大部分人一样开始迷茫python有啥用。迷茫时继续看书,读了《Python2.1宝典》,并记录了21.2万字的笔记。这也是我所有笔记中篇幅最大的。我字数过7万字的也只有12篇而已。python大类是204万字。
而这本书对我后续影响深远,解释了好多个初学者关心的问题。比如程序如何组织,python有哪些好用的库,python适合做哪些程序,如何写界面、服务器、数据存储等等。大家可以看看我笔记记录的目录,有些没有子目录的是没看的:
目录
1 认识Python
1.1 启动Python解释程序
1.2 用变量和表达式进行试验
1.2.1 袖珍计算器
1.2.2 变量
1.3 定义函数
1.4 运行Python程序
1.5 循环和控制
1.5.1 整除
1.5.2 循环
1.5.3 采用if语句的分支
1.5.4 中断和继续
1.6 列表和元组
1.6.1 元组
1.6.2 切片和切换
1.7 词典
1.8 读写文件
1.9 样例程序:字频率
1.10 加载及使用模块
1.11 创建类
1.11.1 一些快速对象术语
1.11.2 对象定位、Python风格
1.11.3 访问类成员
1.11.4 示例:点类
1.12 推荐的阅读资料
2 标识符、变量和数字类型
2.1 标识符和运算符
2.1.1 保留字
2.1.2 运算符
2.2 数字类型
2.2.1 整型
2.2.2 长整型
2.2.3 浮点数
2.2.4 虚数
2.2.5 处理数字类型
2.3 给变量赋值
2.3.1 简单的赋值语句
2.3.2 多个赋值
2.3.3 扩充赋值
3 表达式和字符串
3.1 表达式
3.1.1 比较数字类型
3.1.2 复合表达式
3.1.3 复合表达式
3.1.4 运算符的优先顺序
3.2 字符串
3.2.1 字符串文字
3.2.2 处理字符串
3.2.3 比较字符串
3.2.4 Unicode字符串文字
3.3 在简单类型之间进行转换
3.3.1 转换为数字类型
3.3.2 转换为字符串
4 第四章 高级数据类型
4.1 采用序列组合数据
4.1.1 创建列表
4.1.2 创建元组
4.2 处理序列
4.2.1 采用算术运算符连接和重复
4.2.2 比较和成员资格测试
4.2.3 访问序列中的某部分
4.2.4 采用for...in进行循环
4.2.5 使用序列实用程序函数
4.3 使用附加的列表对象特征
4.3.1 附加运算
4.3.2 列表对象方法
4.4 用词典映射信息
4.4.1 创建并添加到词典
4.4.2 访问和更新词典映射
4.4.3 附加的词典运算
4.5 理解引用
4.5.1 对象身份
4.5.2 计算引用的数目
4.6 复制复合对象
4.6.1 浅副本
4.6.2 深副本
4.7 标识数据类型
4.8 处理数组对象
4.8.1 创建数组
4.8.2 在类型之间转换
4.8.3 数组方法和运算
5 控制流
5.1 用if语句做出决策
5.2 使用for循环
5.2.1 for循环的剖析
5.2.2 循环示例:给字符串编码
5.2.3 ranges和xranges
5.2.4 中断、继续和else子句
5.2.5 在中途换马
5.3 使用while循环
5.4 抛出和捕获异常事件
5.4.1 扩散异常事件
5.4.2 处理异常事件
5.4.3 有关异常事件的更多信息
5.4.4 定义和产生异常事件
5.4.5 用finally进行清除
5.5 用断言进行调试
5.5.1 Python中的断言
5.5.2 触发断言
5.6 示例:Game of Life
6 程序组织
6.1 定义函数
6.1.1 通过对象引用传递
6.1.2 有关参数的所有信息
6.1.3 任意参量
6.1.4 应用:从元组中传递参量
6.1.5 带有一点功能性的编程
6.2 用模块为代码分组
6.2.1 布局模块
6.2.2 获取模块的清单
6.3 导入模块
6.3.1 导入时还会发生什么现象
6.3.2 重新导入模块
6.3.3 外来的导入
6.4 定位模块
6.4.1 Python路径
6.4.2 编译文件
6.5 理解作用域规则
6.5.1 是局部还是全局
6.5.2 列出名字空间的内容
6.6 将模块组合为包
6.7 按计划编译和运行
7 面向对象的Python
7.1 概述面向对象的Python
7.2 创建类和实例对象
7.2.1 创建实例对象
7.2.2 有关访问属性的更多信息
7.3 从其他类中派生新类
7.3.1 多继承
7.3.2 创建定制的列表类
7.3.3 创建定制的字符串类
7.3.4 创建一个定制的词典类
7.4 隐藏私有数据
7.5 识别类成员
7.6 重载标准行为
7.6.1 重载的基本功能
7.6.2 重载数字运算符
7.6.3 重载序列和词典运算符
7.6.4 重载按位运算符
7.6.5 重载类型转换
7.7 使用弱引用
7.7.1 创建弱引用
7.7.2 创建代理对象
8 输入和输出
8.1 打印到屏幕
8.2 访问键盘输入
8.2.1 raw_input
8.2.2 input
8.3 打开、关闭及定位文件
8.3.1 open
8.3.2 文件对象信息
8.3.3 close
8.3.4 文件位置
8.4 写文件
8.5 读文件
8.6 访问标准I/O
8.7 使用类似文件的对象
9 处理字符串和正则表达式
9.1 使用字符串对象
9.1.1 设置字符串格式的方法
9.1.2 更改字符串大小写的方法
9.1.3 字符串格式测试(is方法)
9.1.4 字符串搜索方法
9.1.5 字符串处理方法
9.2 使用字符串模块
9.2.1 字符种类
9.2.2 杂项函数
9.3 定义正则表达式
9.3.1 正则表达式的句法
9.3.2 反斜线和未处理的字符串
9.3.3 字符组和其他反斜线魔数
9.3.4 不贪婪的匹配
9.3.5 扩展
9.3.6 创建和使用正则表达式对象
9.3.7 使用正则表达式对象
9.3.8 在不编译的情况下应用正则表达式
9.4 使用匹配对象
9.4.1 group([groupid,...])
9.4.2 groups([nomatch])
9.4.3 groupdict([nomatch])
9.4.4 start([groupid]),end([groupid]),span([groupid])
9.4.5 re,string,pos,endpos
9.5 把字符串当作文件处理
9.6 为文本编码
9.6.1 使用Unicode字符串
9.6.2 读写非ASCII字符串
9.6.3 使用Unicode数据库
9.7 设置浮点数的格式
9.7.1 fix(number,precision)
9.7.2 sci(number,precision)
10 处理文件和目录
10.1 检索文件和目录信息
10.1.1 逐点方法
10.1.2 I-want-it-all方法
10.2 建立并仔细分析路径
10.2.1 联接路径部件
10.2.2 把路径分为几块
10.2.3 路径的其他修改工具
10.3 列出目录及其匹配文件名
10.4 获得环境和参量信息
10.4.1 环境变量
10.4.2 当前工作目录
10.4.3 命令行参数
10.5 示例:递归的grep实用程序
10.6 复制、重命名及删除路径
10.6.1 复制和链接
10.6.2 重命名
10.6.3 删除
10.7 创建目录和临时文件
10.8 比较文件和目录
10.9 处理文件描述符
10.9.1 通用文件描述符函数
10.9.2 管道
10.10 其他的文件处理技巧
10.10.1 任意访问文本文件中的信息行
10.10.2 使用内存映射文件
10.10.3 重复处理几个文件
11 使用其他操作系统服务
11.1 执行shell命令和其他程序
11.2 产生子进程
11.2.1 popen函数
11.2.2 spawn函数
11.2.3 fork
11.2.4 进程管理和终止
12 存储数据和对象
12.1 数据存储概述
12.1.1 文本与二进制对比
12.1.2 压缩
12.1.3 字节次序(Endianness)
12.1.4 对象状态
12.1.5 目的地
12.1.6 在接收端
12.2 加载并保存对象
12.2.1 采用pickle进行转换
12.2.2 marshal模块
12.3 示例:通过网络移动对象
12.4 使用类似数据库的存储
12.5 转换到C结构或从C结构转换回来
12.6 把数据转换为标准格式
12.6.1 Sun的XDR格式
12.6.2 其他格式
12.7 压缩数据
12.7.1 zlib
12.7.2 gzip
13 访问日期和时间
13.1 在Python中告知时间
13.1.1 滴答
13.1.2 时间元组
13.1.3 秒表时间
13.2 时间格式之间的转换
13.3 解析及打印日期时间
13.3.1 有趣的格式
13.3.2 解析时间
13.3.3 定位
13.4 访问日历
13.4.1 打印月历和年历
13.4.2 日历信息
13.4.3 闰年
13.5 使用时区
13.6 允许两位数字的年
14 使用数据库
14.1 使用基于磁盘的词典
14.2 DBM示例:跟踪电话号码
14.3 基于磁盘的高级词典
14.3.1 dbm
14.3.2 gdbm
14.3.3 dbhash
14.3.4 使用BSD数据库对象
14.4 访问关系数据库
14.4.1 连接对象
14.4.2 事物处理
14.4.3 游标对象
14.5 示例:"类似声音的"查询
14.6 检验相关的元数据
14.7 示例:创建审计表
14.8 DB API的高级特征
14.8.1 输入和输出大小
14.8.2 可重新使用的SQL语句
14.8.3 数据库的库信息
14.8.4 错误层次
15 联网
15.1 联网背景
15.2 处理地址和主机名
15.3 与低层套接字通信
15.3.1 创建和撤消套接字
15.3.2 连接套接字
15.3.3 发送和接收数据
15.3.4 使用套接字选项
15.3.5 转换数字
15.4 示例:多点传送的聊天应用程序
15.5 使用SocketServers
15.5.1 SocketServer族
15.5.2 请求处理程序
15.6 处理Web浏览器请求
15.6.1 BaseHTTPRequestHandler
15.6.2 SimpleHTTPRequestHandler
15.6.3 CGIHTTPRequestHandler
15.6.4 示例:形成处理程序CGI脚本
15.7 在不使用线程的情况下处理多个请求
15.7.1 asyncore
16 理解Internet协议
17 处理Internet数据
18 分析XML和其他标记语言
18.1 标记语言基础知识
18.1.1 标记用于元文本
18.1.2 标记规则
18.1.3 名字空间
18.1.4 处理XML
18.2 分析HTML文件
18.2.1 HTMLParser方法
19 使用Tkinter
19.1 Tkinter简介
19.2 创建GUI
19.2.1 用部件建立界面
19.2.2 部件选项
19.3 部件布局
19.3.1 packer选项
19.3.2 网格选项
19.4 示例:Breakfast按钮
19.5 使用常见选项
19.5.1 颜色选项
19.5.2 大小选项
19.5.3 行为选项
19.6 搜集用户输入
19.7 示例:打印奇特的文本
19.8 使用文本部件
19.9 建立菜单
19.10 使用Tkinter对话框
19.10.1 文件对话框
19.11 实例:文本编辑器
19.12 处理颜色和字体
19.12.1 颜色
19.12.2 字体
19.13 绘制图形
19.13.1 画布部件
19.13.2 处理画布项
19.14 使用计时器
19.15 实例:反弹图片
20 使用高级Tkinter部件
20.1 处理事件
20.1.1 创建事件处理程序
20.1.2 绑定鼠标事件
20.1.3 绑定键盘事件
20.1.4 事件对象
20.2 实例:绘图画布
20.3 高级部件
20.3.1 列表框
20.3.2 标尺
20.3.3 滚动条
20.4 实例:颜色方案定制程序
20.5 创建对话框
20.6 支持拖放操作
20.7 使用光标
20.8 设计新部件
20.9 其他的Tkinter功能
20.10 其他的部件
20.11 学习更多内容
21 用wxPython建立用户界面
21.1 介绍wxPython
21.2 创建简单的wxPython程序
21.3 选择不同的窗口类型
21.3.1 管理窗口
21.3.2 非管理窗口
21.4 使用wxPython控件
21.4.1 常用控件
21.4.2 树形控件
21.4.3 编辑器控件
21.5 控制布局
21.5.1 指定坐标
21.5.2 筛选器
21.5.3 布局限制
21.5.4 布局算法
21.6 使用内置对话框
21.7 设备相关内容绘图
21.8 添加菜单和快捷键
21.9 访问鼠标和键盘输入
21.10 其他的wxPython特性
21.10.1 剪贴板、拖放和光标
21.10.2 图形
21.10.3 日期和时间
21.10.4 字体
21.10.5 HTML
21.10.6 打印
21.10.7 其他
22 使用Cruses
23 建立简单的命令解释程序
24 播放声音
24.1 声音文件基础
24.2 播放声音
24.2.1 在Windows上播放声音
24.2.2 在SunOS上播放和记录声音
24.3 测试音频文件
24.4 读取和编写音频文件
24.4.1 用aifc来读取和写入AIFF文件
24.4.2 用sunau读取和写入au文件
24.4.3 用wave读取和写入WAV文件
24.4.4 实例:倒转音频文件
24.4.5 读取IFF大块数据
25 图像处理
25.1 图像基础
25.2 识别图像文件类型
25.3 在颜色系统间转换
25.3.1 颜色系统
25.3.2 从一种系统转换到另一种系统
25.4 处理原始图像数据
25.5 使用Python图像库
25.5.1 检索图像信息
25.5.2 复制与转换图像
25.5.3 使用带有Tkinter的PIL
25.5.4 裁剪和调整图像尺寸
25.5.5 修改像素数据
25.5.6 其他PIL功能
26 多线程
26.1 理解线程
26.2 执行、跟踪和终止线程
26.2.1 使用thread模块来创建线程
26.2.2 使用threading模块开始和停止线程
26.2.3 线程状态和threading下的信息
26.2.4 在threading下找到线程
26.2.5 等待线程完成
26.3 避免并发问题
26.3.1 Thread锁定
26.3.2 threading锁定
26.4 防止死锁
26.5 实例:从多个URL下载
26.6 转入线程化代码
26.7 将线程与队列编织在一起
26.8 技术要点:并发是如何发生的
26.9 更多信息
27 调试、配置和优化
27.1 调试Python代码
27.1.1 开始和停止调试程序
27.1.2 检查状态
27.1.3 设置断点
27.1.4 运行
27.1.5 Aliases
27.1.6 调试技巧
27.2 使用docstrings工作
27.3 自动测试
27.3.1 使docstrings和代码同步
27.3.2 单元测试
27.4 发现瓶颈
27.4.1 配置代码
27.4.2 使用Profile对象
27.4.3 校准配置程序
27.4.4 定制统计
27.5 常见优化技巧
27.5.1 排序
27.5.2 循环
27.5.3 I/O(输入/输出)
27.5.4 字符串
27.5.5 线程
27.6 扔掉废物-回收站
27.6.1 引用记数和Python代码
27.6.2 引用记数和C/C++代码
28 安全与加密
28.1 密码检查
28.2 在限制环境中运行
28.2.1 rexec沙盒
28.2.2 使用要塞类(class fortress)
28.3 创建消息指纹
28.3.1 MD5
28.3.2 SHA
28.3.3 其他用途
28.4 使用20世纪40年代的加密方法
29 编写扩展模块
30 嵌入Python解释程序
31 数值计算
32 使用NumPy
33 解析和解释Python代码
34 创建全世界可用的应用程序
34.1 国际化和本地化
34.2 为多种语言准备应用程序
34.2.1 NLS示例
34.2.2 这一切的含义
34.3 与地域相关输出的格式化
34.3.1 修改地域
34.3.2 与地域相关的格式化
35 定制导入行为
36 分布模块和应用程序
37 Windows平台
37.1 使用win32all
37.1.1 数据类型
37.1.2 错误处理
37.1.3 找到自己所需要的
37.2 示例:使用某些Windows API
37.3 访问Windows注册表
37.3.1 用win32all访问注册表
37.4 示例:设定IE主页
37.4.1 键的创建、删除和定位
37.4.2 示例:键的递归删除
37.4.3 其他注册表函数
37.4.4 用_winreg访问注册表
37.5 使用msvcrt goodies
37.5.1 控制台I/O
37.5.2 其他函数
38 Unix兼容模块
就是这样一本老掉牙的书,帮助我迅速把python用到了众多领域。其关键不在于老,而是这本书列出了很多库,让读者知道这些库能解决什么问题,并拓展读者的思路。在python-cn邮件列表里,大家的一个常见话题也是某个需求不知用什么模块搞定。
所以,对于希望系统学习python的同学。python语言本身的内容很少。想要让python发挥更大作用,就需要了解更多的库。