logo资料库

python2.7.6官方教程中文版.pdf

第1页 / 共105页
第2页 / 共105页
第3页 / 共105页
第4页 / 共105页
第5页 / 共105页
第6页 / 共105页
第7页 / 共105页
第8页 / 共105页
资料共105页,剩余部分请下载后查看
开胃菜
使用Python 解释器
调用Python 解释器
参数传递
交互模式
解释器及其环境
错误处理
执行 Python 脚本
源程序编码
交互执行文件
本地化模块
Python 简介
将 Python 当做计算器
数字
字符串
关于 Unicode
列表
编程的第一步
深入Python 流程控制
if 语句
for 语句
range() 函数
break 和 continue 语句, 以及循环中的 else 子句
pass 语句
定义函数
深入 Python 函数定义
默认参数值
关键字参数
可变参数列表
参数列表的分拆
Lambda 形式
文档字符串
插曲:编码风格
数据结构
关于列表更多的内容
把链表当作堆栈使用
把链表当作队列使用
函数式编程工具
列表推导式
del 语句
元组和序列
集合
字典
循环技巧
深入条件控制
比较序列和其它类型
模块
深入模块
作为脚本来执行模块
模块的搜索路径
``编译的''Python 文件
标准模块
dir() 函数
从 * 导入包
包内引用
多重目录中的包
输入和输出
格式化输出
旧式的字符串格式化
文件读写
文件对象方法
pickle 模块
错误和异常
语法错误
异常
异常处理
抛出异常
用户自定义异常
定义清理行为
预定义清理行为
术语相关
Python 作用域和命名空间
初识类
类定义语法
类对象
实例对象
方法对象
一些说明
继承
多继承
私有变量
补充
异常也是类
迭代器
生成器
生成器表达式
Python 标准库概览
操作系统接口
文件通配符
命令行参数
错误输出重定向和程序终止
字符串正则匹配
数学
互联网访问
日期和时间
数据压缩
性能度量
质量控制
``瑞士军刀''
标准库浏览–Part II
输出格式
模板
使用二进制数据记录布局
多线程
日志
弱引用
列表工具
十进制浮点数算法
接下来?
交互式输入行编辑历史回溯
行编辑
历史回溯
快捷键绑定
其它交互式解释器
浮点数算法:争议和限制
表达错误
Python 2.7.6 官方教程中文版 排版 天涯客 本教程出自Python 中文学习大本营 (本文档由 LATEX 排版系统编辑而成, 编辑环境:TEXLive 2014 + TEXmaker) 2015-01-14
目 录 1 开胃菜 6 2 使用 Python 解释器 8 8 2.1 调用 Python 解释器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1.1 参数传递 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1.2 交互模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.2 解释器及其环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.2.1 错误处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.2 执行 Python 脚本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.2.3 源程序编码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.2.4 交互执行文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.2.5 本地化模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3 Python 简介 12 3.1 将 Python 当做计算器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.1.1 数字 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.1.2 字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.1.3 关于 Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.1.4 列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.2 编程的第一步 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4 深入 Python 流程控制 24 if 语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 4.1 for 语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 4.2 4.3 range() 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.4 break 和 continue 语句, 以及循环中的 else 子句 . . . . . . . . . . . . . . . . . . . . . . . . 26 4.5 pass 语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.6 定义函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.7 深入 Python 函数定义 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.7.1 默认参数值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.7.2 关键字参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.7.3 可变参数列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.7.4 参数列表的分拆 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2
目 录 3 4.7.5 Lambda 形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.7.6 文档字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.8 插曲:编码风格 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 5 数据结构 35 5.1 关于列表更多的内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.1.1 把链表当作堆栈使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.1.2 把链表当作队列使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.1.3 函数式编程工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.1.4 列表推导式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.2 del 语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.3 元组和序列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.4 集合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.5 字典 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.6 循环技巧 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 5.7 深入条件控制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5.8 比较序列和其它类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 6 模块 47 6.1 深入模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 6.1.1 作为脚本来执行模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 6.1.2 模块的搜索路径 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 6.1.3 “编译的”Python 文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 6.2 标准模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 6.3 dir() 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.4 包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 6.4.1 从 * 导入包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 6.4.2 包内引用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 6.4.3 多重目录中的包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 7 输入和输出 56 7.1 格式化输出 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 7.1.1 旧式的字符串格式化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 7.2 文件读写 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 7.2.1 文件对象方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 7.2.2 pickle 模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 8 错误和异常 63 8.1 语法错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 8.2 异常 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 8.3 异常处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 8.4 抛出异常 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 8.5 用户自定义异常 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 8.6 定义清理行为 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4 目 录 8.7 预定义清理行为 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 9 类 71 9.1 术语相关 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 9.2 Python 作用域和命名空间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 9.3 初识类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 9.3.1 类定义语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 9.3.2 类对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 9.3.3 实例对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 9.3.4 方法对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 9.4 一些说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 9.5 继承 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 9.5.1 多继承 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 9.6 私有变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 9.7 补充 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 9.8 异常也是类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 9.9 迭代器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 9.10 生成器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 9.11 生成器表达式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 10 Python 标准库概览 83 10.1 操作系统接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 10.2 文件通配符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 10.3 命令行参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 10.4 错误输出重定向和程序终止 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 10.5 字符串正则匹配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 10.6 数学 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 10.7 互联网访问 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 10.8 日期和时间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 10.9 数据压缩 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 10.10性能度量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 10.11质量控制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 10.12“瑞士军刀” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 11 标准库浏览–Part II 89 11.1 输出格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 11.2 模板 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 11.3 使用二进制数据记录布局 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 11.4 多线程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 11.5 日志 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 11.6 弱引用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 11.7 列表工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 11.8 十进制浮点数算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
目 录 12 接下来? 5 97 13 交互式输入行编辑历史回溯 99 13.1 行编辑 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 13.2 历史回溯 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 13.3 快捷键绑定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 13.4 其它交互式解释器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 14 浮点数算法:争议和限制 102 14.1 表达错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
CHAPTER 1 开胃菜 如果你要用计算机做很多工作,最后你会发现有一些任务你更希望用自动化的方式进行处理。比如, 你想要在大量的文本文件中执行查找/替换,或者以复杂的方式对大量的图片进行重命名和整理。也许 你想要编写一个小型的自定义数据库、一个特殊的 GUI 应用程序或一个简单的小游戏。 如果你是一名专业的软件开发者,可能你必须使用几种 C/C++/JAVA 类库,并且发现通常编写/编 译/测试/重新编译的周期是如此漫长。也许你正在为这些类库编写测试用例,但是发现这是一个让人烦 躁的工作。又或者你已经完成了一个可以使用扩展语言的程序,但你并不想为此重新设计并实现一套全 新的语言。 那么 Python 正是你所需要的语言。 虽然你能够通过编写 Unix shell 脚本或 Windows 批处理文件来处理其中的某些任务,但 Shell 脚本 更适合移动文件或修改文本数据,并不适合编写 GUI 应用程序或游戏;虽然你能够使用 C/C++/JAVA 编写程序,但即使编写一个简单的 first-draft 程序也有可能耗费大量的开发时间。相比之下,Python 更 易于使用,无论在 Windows、Mac OS X 或 Unix 操作系统上它都会帮助你更快地完成任务。 虽然 Python 易于使用,但它却是一门完整的编程语言;与 Shell 脚本或批处理文件相比,它为编写 大型程序提供了更多的结构和支持。另一方面,Python 提供了比 C 更多的错误检查,并且作为一门高 级语言,它内置支持高级的数据结构类型,例如:灵活的数组和字典。因其具有更多的通用数据类型,同 Awk 甚至 Perl 相比较,Python 适用于更多领域,至少大多数事情在 Python 中与其他语言同样简单。 Python 允许你将程序分割为不同的模块,以便在其他的 Python 程序中重用。Python 内置提供了 大量的标准模块,你可以将其用作程序的基础,或者作为学习 Python 编程的示例。这些模块提供了诸 如文件 I/O、系统调用、Socket 支持,甚至类似 Tk 的用户图形界面 (GUI) 工具包接口。 Python 是一门解释型语言,因为无需编译和链接,你可以在程序开发中节省宝贵的时间。Python 解释器可以交互地使用,这使得试验语言的特性、编写临时程序或在自底向上的程序开发中测试方法非 常容易。你甚至还可以把它当做一个桌面计算器。 Python 让程序编写的紧凑和可读。用 Python 编写的程序通常比同样的 C、C++ 或 Java 程序更 短小,这是因为以下几个原因: • 高级数据结构使你可以在一条语句中表达复杂的操作; • 语句组使用缩进代替开始和结束大括号来组织; • 变量或参数无需声明。 6
7 Python 是可扩展的:如果你会 C 语言编程便可以轻易的为解释器添加内置函数或模块,或者为了 对性能瓶颈作优化,或者将 Python 程序与只有二进制形式的库 (比如某个专业的商业图形库) 连接起 来。一旦你真正掌握了它,你可以将 Python 解释器集成进某个 C 应用程序,并把它当作那个程序的扩 展或命令行语言。 顺便说一句,这个语言的名字来自于 BBC 的“Monty Python’s Flying Cirecus”节目,和爬行类 动物没有任何关系。在文档中引用 Monty Python 的典故不仅可行,而且值得鼓励! 现在你已经为 Python 兴奋不已了吧,迫不及待地想要领略更多的细节!学习一门语言最好的方法 就是使用它,本指南推荐你边读边使用 Python 解释器练习。 下一节中,我们将解释 Python 解释器的用法。这是很简单的一件事情,但它有助于试验后面的例 子。 本手册剩下的部分将通过示例介绍 Python 语言及系统的诸多特性,开始是简单的语法、数据类型 和表达式,接着介绍函数与模块,最后涉及异常和自定义类这样的高级内容。
CHAPTER 2 使用 Python 解释器 2.1 调用 Python 解释器 Python 解释器通常被安装在目标机器的 /usr/local/bin/python 目录下。将 /usr/local/bin 目 录包含进 Unix shell 的搜索路径里,以确保可以通过输入 1 python 命令来启动它。由于 Python 解释器的安装路径是可选的,这也可能是其他路径,你可以联系安装 Python 的用户或系统管理员确认。(例如,/usr/local/python 就是一个常见的选择) 在 Windows 机器上,Python 通常安装在 C:\Python27 位置,当然你可以在运行安装向导时修改此 值。要想把此目录添加到你的 PATH 环境变量中,你可以在 DOS 窗口中输入以下命令 1 set path=%path%;C:\python27 通常你可以在主窗口输入一个文件结束符 (Unix 系统是 Control-D ,Windows 系统是 Control-Z ) 让解释器以 0 状态码退出。如果它不起作用,你可以通过输入 quit() 命令退出解释器。 Python 解释器具有简单的行编辑功能。在 Unix 系统上,任何 Python 解释器都可能已经添加了 GNU readline 库支持,这样就具备了精巧的交互编辑和历史记录等功能。在 Python 主窗口中输入 Control-P 可能是检查是否支持命令行编辑的最简单的方法。如果发出嘟嘟声 (计算机扬声器),则说明 你可以使用命令行编辑功能;更多快捷键的介绍请参考交互式输入行编辑历史回溯。如果没有任何声音, 或者显示 ^P 字符,则说明命令行编辑功能不可用;你只能通过退格键从当前行删除已键入的字符并重 新输入。 Python 解释器有些操作类似 Unix shell:当使用终端设备 (tty) 作为标准输入调用时,它交互地解 释并执行命令;当使用文件名参数或以文件作为标准输入调用时,它读取文件并将文件作为脚本执行。 第二种启动 Python 解释器的方法是 python -c command [arg] ... ,这种方法可以在命令行执 行 Python 语句,类似于 shell 中的 -c 选项。由于 Python 语句通常会包含空格或其他特殊 shell 字符, 一般建议将命令用单引号包裹起来。 有一些 Python 模块也可以当作脚本使用。你可以使用 python -m module [arg] ... 命令来调用 它们,这类似在命令行中键入完整的路径名执行模块源文件一样。 使用脚本文件时,经常会运行脚本然后进入交互模式。这也可以通过在脚本之前加上 -i 参数来实 现。 8
分享到:
收藏