![]() ![]() |
Python基础教程(第2版·修订版)
《Python基础教程(第2版·修订版)》包括Python程序设计的方方面面,首先从Python的安装开始,随后介绍了Python的基础知识和基本概念,包括列表、元组、字符串、字典以及各种语句。然后循序渐进地介绍了一些相对高级的主题,包括抽象、异常、魔法方法、属性、迭代器。此后探讨了如何将Python与数据库、网络、C语言等工具结合使用,从而发挥出Python的强大功能,同时介绍了Python程序测试、打包、发布等知识。最后,作者结合前面讲述的内容,按照实际项目开发的步骤向读者介绍了几个具有实际意义的Python项目的开发过程。
《Python基础教程(第2版·修订版)》内容涉及的范围较广,既能为初学者夯实基础,又能帮助程序员提升技能,适合各个层次的Python开发人员阅读参考。
《Python基础教程(第2版·修订版)》是经典的Python入门教程,层次鲜明,结构严谨,内容翔实,特别是最后几章,作者将前面讲述的内容应用到10个引人入胜的项目中,并以模板的形式介绍了项目的开发过程,手把手教授Python开发,让读者从项目中领略Python的真正魅力。
《Python基础教程(第2版·修订版)》既适合初学者夯实基础,又能帮助Python程序员提升技能,即使是Python方面的技术专家,也能从书里找到耳目一新的内容。
新版的《Python基础教程》终于和大家见面了。如果算上这本书的前身Pratical Python,实际上这已经是第3版了。这本书也让我投入了近10年时间。这期间,Python发生了许多有趣的变化,我也在尽力更新我对这门语言的介绍。同时,Python也面临着在相当长的一段时间内最具标志性的变化:推出了第3版。在本书撰写时,最终版本还没有发布,但是其特性已跃然纸上,并且已经推出了几个可用的版本。这次升级带来一个很有意思的挑战,就是它不再向下兼容。换句话说,它并不是简单地增加一些功能,让我可以挑挑捡捡地写进书中。它同时还会改变已经存在的语言特性,也就是说Python 2.5版本中大家习以为常的事情在新版本将不再成立。
要是整个Python社区都能立即着手转换到新版本,更新所有遗留代码,那当然不会有什么问题。我只要讲解新的语言就可以了!但是,大量用旧版编写的代码还会存在,并且人们仍然有可能继续用旧版编写代码,直到第3版完全板上钉钉。 那么,怎么应付这个变化呢?首先,就算新版本有些不兼容的改变,但语言的大部分还是相同的。也就是说,如果我的程序完全用Python 2.5编写,基本上在Python 3上也能运行(在兼容版本2.6版上更不成问题)。至于那些不再正确的部分,我则持保守态度,猜测Python 3完全被大家接受还需要一定时间。本书基本上基于2.5版本编写,并且在行文中标注出在新版中会有改变的部分。除此之外,我还增加了一个附录D,概要介绍了一些主要改变。对于大多数读者来说,我觉得应该够了。 在撰写本书第2版时,我得到了许多人的帮助。就像在写前两版(本书第1版和之前的Pratical Python)一样,Jason Gilmore扶我上马,并且在项目进展的过程中扮演了重要角色。Richard Dal Porto、Frank Pohlmann和Dominic Shakeshaft在过程中也常助我一臂之力。Richard Taylor至关重要,他要确保代码完全正确(如果还是有错,大家骂我好了),而Marilyn Smith为我的写作润色不少。我还要感谢Apress的其他同仁们,包括Liz Berry、Beth Christmas、Steve Anglin和Tina Nielsen,还有那些帮我修订错误以及提出宝贵意见的读者们,其中包括Bob Helmbold和Waclaw Kusnierczyk。当然,我还要感谢所有那些将本书的前两版本买回家的读者们。
Magnus Lie Hetland ,挪威科技大学副教授,教授算法。黑客,喜欢钻研新锐编程语言,是Python语言的坚定支持者。他写过很多Python方面的书和在线教程,比如深受读者欢迎的网上教程Instant Python。此外他还是一名业余话剧演员,从1985年首次登台至今,已经参演数十部话剧。
目 录
第1章 快速改造:基础知识 1 1.1 安装Python 1 1.1.1 Windows 1 1.1.2 Linux和UNIX 3 1.1.3 苹果机(Macintosh) 4 1.1.4 其他发行版本 5 1.1.5 时常关注,保持更新 6 1.2 交互式解释器 6 1.3 算法是什么 7 1.4 数字和表达式 8 1.4.1 长整数 9 1.4.2 十六进制和八进制 10 1.5 变量 10 1.6 语句 11 1.7 获取用户输入 12 1.8 函数 13 1.9 模块 14 1.9.1 cmath和复数 14 1.9.2 回到__future__ 15 1.10 保存并执行程序 15 1.10.1 通过命令提示符运行Python脚本 16 1.10.2 让脚本像普通程序一样运行 17 1.10.3 注释 18 1.11 字符串 19 1.11.1 单引号字符串和转义引号 19 1.11.2 拼接字符串 20 1.11.3 字符串表示,str和repr 20 1.11.4 input和raw_input的比较 21 1.11.5 长字符串、原始字符串和Unicode 22 1.12 小结 24 1.12.1 本章的新函数 25 1.12.2 接下来学什么 25 第2章 列表和元组 26 2.1 序列概览 26 2.2 通用序列操作 27 2.2.1 索引 27 2.2.2 分片 29 2.2.3 序列相加 31 2.2.4 乘法 31 2.2.5 成员资格 32 2.2.6 长度、最小值和最大值 33 2.3 列表:Python的“苦力” 34 2.3.1 list函数 34 2.3.2 基本的列表操作 34 2.3.3 列表方法 36 2.4 元组:不可变序列 41 2.4.1 tuple函数 42 2.4.2 基本元组操作 42 2.4.3 那么,意义何在 42 2.5 小结 43 2.5.1 本章的新函数 43 2.5.2 接下来学什么 43 第3章 使用字符串 44 3.1 基本字符串操作 44 3.2 字符串格式化:精简版 44 3.3 字符串格式化:完整版 46 3.3.1 简单转换 47 3.3.2 字段宽度和精度 47 3.3.3 符号、对齐和用0填充 47 3.4 字符串方法 49 3.4.1 find 49 3.4.2 join 50 3.4.3 lower 51 3.4.4 replace 51 3.4.5 split 52 3.4.6 strip 52 3.4.7 translate 52 3.5 小结 54 3.5.1 本章的新函数 54 3.5.2 接下来学什么 54 第4章 字典:当索引不好用时 55 4.1 字典的使用 55 4.2 创建和使用字典 56 4.2.1 dict函数 56 4.2.2 基本字典操作 57 4.2.3 字典的格式化字符串 58 4.2.4 字典方法 59 4.3 小结 64 4.3.1 本章的新函数 64 4.3.2 接下来学什么 64 第5章 条件、循环和其他语句 65 5.1 print和import的更多信息 65 5.1.1 使用逗号输出 65 5.1.2 把某件事作为另一件事导入 66 5.2 赋值魔法 67 5.2.1 序列解包 67 5.2.2 链式赋值 68 5.2.3 增量赋值 68 5.3 语句块:缩排的乐趣 69 5.4 条件和条件语句 69 5.4.1 这就是布尔变量的作用 69 5.4.2 条件执行和 if 语句 70 5.4.3 else子句 71 5.4.4 elif子句 71 5.4.5 嵌套代码块 71 5.4.6 更复杂的条件 72 5.4.7 断言 76 5.5 循环 76 5.5.1 while循环 77 5.5.2 for循环 77 5.5.3 循环遍历字典元素 78 5.5.4 一些迭代工具 79 5.5.5 跳出循环 80 5.5.6 循环中的else子句 82 5.6 列表推导式——轻量级循环 82 5.7 三人行 83 5.7.1 什么都没发生 84 5.7.2 使用del删除 84 5.7.3 使用exec和eval执行和求值字符串 85 5.8 小结 87 5.8.1 本章的新函数 88 5.8.2 接下来学什么 88 第6章 抽象 89 6.1 懒惰即美德 89 6.2 抽象和结构 90 6.3 创建函数 90 6.3.1 文档化函数 91 6.3.2 并非真正函数的函数 92 6.4 参数魔法 92 6.4.1 值从哪里来 93 6.4.2 我能改变参数吗 93 6.4.3 关键字参数和默认值 97 6.4.4 收集参数 99 6.4.5 参数收集的逆过程 101 6.4.6 练习使用参数 102 6.5 作用域 103 6.6 递归 105 6.6.1 两个经典:阶乘和幂 106 6.6.2 另外一个经典:二分法查找 107 6.7 小结 110 6.7.1 本章的新函数 110 6.7.2 接下来学什么 111 第7章 更加抽象 112 7.1 对象的魔力 112 7.1.1 多态 113 7.1.2 封装 115 7.1.3 继承 117 7.2 类和类型 117 7.2.1 类到底是什么 117 7.2.2 创建自己的类 118 7.2.3 特性、函数和方法 119 7.2.4 类的命名空间 121 7.2.5 指定超类 122 7.2.6 检查继承 122 7.2.7 多个超类 123 7.2.8 接口和内省 124 7.3 一些关于面向对象设计的思考 125 7.4 小结 125 7.4.1 本章的新函数 126 7.4.2 接下来学什么 126 第8章 异常 127 8.1 什么是异常 127 8.2 按自己的方式出错 127 8.2.1 raise语句 127 8.2.2 自定义异常类 128 8.3 捕捉异常 129 8.4 不止一个except子句 130 8.5 用一个块捕捉两个异常 131 8.6 捕捉对象 131 8.7 真正的全捕捉 132 8.8 万事大吉 132 8.9 最后…… 134 8.10 异常和函数 134 8.11 异常之禅 135 8.12 小结 136 8.12.1 本章的新函数 137 8.12.2 接下来学什么 137 第9章 魔法方法、属性和迭代器 138 9.1 准备工作 138 9.2 构造方法 139 9.2.1 重写一般方法和特殊的构造方法 140 9.2.2 调用未绑定的超类构造方法 141 9.2.3 使用super函数 142 9.3 成员访问 143 9.3.1 基本的序列和映射规则 144 9.3.2 子类化列表,字典和字符串 146 9.4 更多魔力 147 9.5 属性 147 9.5.1 property函数 148 9.5.2 静态方法和类成员方法 149 9.5.3 __getattr__、__setattr__和它的朋友们 150 9.6 迭代器 151 9.6.1 迭代器规则 151 9.6.2 从迭代器得到序列 153 9.7 生成器 153 9.7.1 创建生成器 153 9.7.2 递归生成器 154 9.7.3 通用生成器 156 9.7.4 生成器方法 156 9.7.5 模拟生成器 157 9.8 八皇后问题 158 9.8.1 生成器和回溯 158 9.8.2 问题 159 9.8.3 状态表示 159 9.8.4 寻找冲突 159 9.8.5 基本情况 160 9.8.6 需要递归的情况 161 9.8.7 打包 162 9.9 小结 163 9.9.1 本章的新函数 164 9.9.2 接下来学什么 164 第10章 自带电池 165 10.1 模块 165 10.1.1 模块是程序 165 10.1.2 模块用于定义 167 10.1.3 让你的模块可用 169 10.1.4 包 171 10.2 探究模块 172 10.2.1 模块中有什么 172 10.2.2 用help获取帮助 173 10.2.3 文档 174 10.2.4 使用源代码 174 10.3 标准库:一些最爱 175 10.3.1 sys 175 10.3.2 os 176 10.3.3 fileinput 178 10.3.4 集合、堆和双端队列 180 10.3.5 time 184 10.3.6 random 185 10.3.7 shelve 188 10.3.8 re 191 10.3.9 其他有趣的标准模块 204 10.4 小结 205 10.4.1 本章的新函数 205 10.4.2 接下来学什么 206 第11章 文件和流 207 11.1 打开文件 207 11.1.1 文件模式 207 11.1.2 缓冲 208 11.2 基本的文件方法 209 11.2.1 读和写 209 11.2.2 管式输出 210 11.2.3 读写行 211 11.2.4 关闭文件 212 11.2.5 使用基本文件方法 213 11.3 对文件内容进行迭代 214 11.3.1 按字节处理 214 11.3.2 按行操作 215 11.3.3 读取所有内容 215 11.3.4 使用fileinput实现懒惰行迭代 216 11.3.5 文件迭代器 216 11.4 小结 217 11.4.1 本章的新函数 218 11.4.2 接下来学什么 218 第12章 图形用户界面 219 12.1 丰富的平台 219 12.2 下载和安装wxPython 220 12.3 创建示例GUI应用程序 221 12.3.1 开始 221 12.3.2 窗口和组件 222 12.3.3 标签、标题和位置 223 12.3.4 更智能的布局 225 12.3.5 事件处理 226 12.3.6 完成了的程序 226 12.4 但是我宁愿用…… 228 12.4.1 使用Tkinter 229 12.4.2 使用Jython和Swing 229 12.4.3 使用其他开发包 230 12.5 小结 230 第13章 数据库支持 231 13.1 Python数据库编程接口(API) 232 13.1.1 全局变量 232 13.1.2 异常 233 13.1.3 连接和游标 233 13.1.4 类型 235 13.2 SQLite和PySQLite 235 13.2.1 入门 236 13.2.2 数据库应用程序示例 237 13.3 小结 239 13.3.1 本章的新函数 240 13.3.2 接下来学什么 240 第14章 网络编程 241 14.1 少数几个网络设计模块 241 14.1.1 socket模块 242 14.1.2 urllib和urllib2模块 243 14.1.3 其他模块 245 14.2 SocketServer和它的朋友们 246 14.3 多个连接 247 14.3.1 使用SocketServer进行分叉和线程处理 248 14.3.2 带有select和poll的异步I/O 249 14.4 Twisted 251 14.4.1 下载并安装Twisted 251 14.4.2 编写Twisted服务器 251 14.5 小结 253 14.5.1 本章的新函数 254 14.5.2 接下来学什么 254 第15章 Python和Web 255 15.1 屏幕抓取 255 15.1.1 Tidy和XHTML解析 256 15.1.2 Beautiful Soup 260 15.2 使用CGI创建动态网页 261 15.2.1 第一步:准备网络服务器 261 15.2.2 第二步:加入Pound Bang行 261 15.2.3 第三步:设置文件权限 262 15.2.4 CGI安全风险 263 15.2.5 简单的CGI脚本 263 15.2.6 使用cgitb调试 263 15.2.7 使用cgi模块 264 15.2.8 简单的表单 266 15.3 更进一步:mod_python 267 15.3.1 安装mod_python 268 15.3.2 CGI处理程序 269 15.3.3 PSP 270 15.3.4 发布 271 15.4 网络应用程序框架 273 15.5 Web服务:正确分析 274 15.5.1 RSS和相关内容 274 15.5.2 使用XML-RPC进行远程过程调用 275 15.5.3 SOAP 276 15.6 小结 276 15.6.1 本章的新函数 276 15.6.2 接下来学什么 276 第16章 测试 277 16.1 先测试,后编码 277 16.1.1 精确的需求说明 278 16.1.2 为改变而计划 279 16.1.3 测试的4个步骤 279 16.2 测试工具 280 16.2.1 doctest 280 16.2.2 unittest 282 16.3 单元测试以外的内容 285 16.3.1 使用PyChecker和PyLint检查源代码 285 16.3.2 性能分析 288 16.4 小结 289 16.4.1 本章的新函数 290 16.4.2 接下来学什么 290 第17章 扩展Python 291 17.1 考虑哪个更重要 291 17.2 非常简单的途径:Jython和IronPython 292 17.3 编写C语言扩展 294 17.3.1 SWIG 296 17.3.2 自己研究 299 17.4 小结 303 17.4.1 本章的新函数 304 17.4.2 接下来学什么 304 第18章 程序打包 305 18.1 Distutils基础 305 18.2 打包 307 18.2.1 建立存档文件 307 18.2.2 创建Windows安装程序或RPM包 308 18.3 编译扩展 309 18.4 使用py2exe创建可执行程序 310 18.5 小结 311 18.5.1 本章的新函数 311 18.5.2 接下来学什么 311 第19章 好玩的编程 312 19.1 为什么要好玩 312 19.2 程序设计的柔术 312 19.3 原型设计 313 19.4 配置 314 19.4.1 提取常量 314 19.4.2 配置文件 315 19.5 日志记录 317 19.6 如果还没烦 318 19.7 如果还想学 318 19.8 小结 319 第20章 项目1:即时标记 320 20.1 问题是什么 320 20.2 有用的工具 321 20.3 准备工作 321 20.4 初次实现 322 20.4.1 找出文本块 322 20.4.2 添加一些标记 323 20.5 再次实现 324 20.5.1 处理程序 325 20.5.2 处理程序的超类 325 20.5.3 规则 327 20.5.4 规则的超类 328 20.5.5 过滤器 328 20.5.6 分析器 328 20.5.7 构造规则和过滤器 329 20.5.8 整合 332 20.6 进一步探索 336 第21章 项目2:画幅好画 337 21.1 问题 337 21.2 有用的工具 338 21.3 准备工作 338 21.4 初次实现 339 21.4.1 用ReportLab画图 339 21.4.2 生成折线 340 21.4.3 编写原型 341 21.5 再次实现 342 21.5.1 获取数据 342 21.5.2 使用LinePlot类 343 21.6 进一步探索 344 第22章 项目3:万能的XML 345 22.1 问题 345 22.2 有用的工具 346 22.3 准备工作 347 22.4 初次实现 348 22.4.1 创建简单的内容处理器 348 22.4.2 生成HTML页面 350 22.5 再次实现 352 22.5.1 调度程序的混入类 352 22.5.2 实现首部、页脚和默认的处理程序 354 22.5.3 对目录的支持 354 22.5.4 事件处理程序 355 22.6 进一步探索 358 第23章 项目4:新闻聚合 359 23.1 问题 359 23.2 有用的工具 360 23.3 准备工作 360 23.4 初次实现 360 23.5 再次实现 363 23.6 进一步探索 369 第24章 项目5:虚拟茶话会 371 24.1 问题 371 24.2 有用的工具 371 24.3 准备工作 372 24.4 初次实现 373 24.4.1 ChatServer类 373 24.4.2 ChatSession类 374 24.4.3 整合 376 24.5 再次实现 377 24.5.1 基础命令解释 378 24.5.2 房间 378 24.5.3 登录和退出房间 379 24.5.4 主聊天室 379 24.5.5 新的服务器 380 24.6 进一步探索 384 第25章 项目6:使用CGI进行远程编辑 385 25.1 问题 385 25.2 有用的工具 385 25.3 准备工作 386 25.4 初次实现 386 25.5 再次实现 387 25.5.1 创建文件名表单 387 25.5.2 创建编辑器的脚本 388 25.5.3 编写保存脚本 389 25.5.4 运行编辑器 390 25.6 进一步探索 391 第26章 项目7:自定义电子公告板 393 26.1 问题 393 26.2 有用的工具 394 26.3 准备工作 394 26.4 初次实现 395 26.5 再次实现 398 26.5.1 编写Main脚本 399 26.5.2 编写View脚本 400 26.5.3 编写Edit脚本 401 26.5.4 编写Save脚本 403 26.5.5 尝试使用 404 26.6 进一步探索 404 第27章 项目8:使用XML-RPC进行文件共享 406 27.1 问题 406 27.2 有用的工具 407 27.3 准备工作 407 27.4 初次实现 408 27.4.1 实现一个简单的节点 408 27.4.2 尝试使用首次实现 413 27.5 再次实现 414 27.5.1 创建客户端界面 414 27.5.2 引发异常 415 27.5.3 验证文件名 416 27.5.4 尝试使用再次实现 419 27.6 进一步探索 420 第28章 项目9:文件共享2——GUI版本 421 28.1 问题 421 28.2 有用的工具 421 28.3 准备工作 421 28.4 初次实现 422 28.5 再次实现 424 28.6 进一步探索 427 第29章 项目10:DIY街机游戏 428 29.1 问题 428 29.2 有用的工具 429 29.2.1 pygame 429 29.2.2 pygame.locals 429 29.2.3 pygame.display 430 29.2.4 pygame.font 430 29.2.5 pygame.sprite 430 29.2.6 pygame.mouse 431 29.2.7 pygame.event 431 29.2.8 pygame.image 431 29.3 准备工作 431 29.4 初次实现 432 29.5 再次实现 434 29.6 进一步探索 442 附录A 简明版本 443 附录B Python参考手册 450 附录C 在线资源 461 附录D Python 3.0 464
你还可能感兴趣
我要评论
|