本书是国内第一本讲述Python语言的图书。Python是一种功能十分强大的面向对象编程语言,可以用于编写独立程序、快速脚本和复杂应用的原型。作为一种开源软件,Python可以自由获取,而且非常易学易用。它已经在各种平台上实现了移植,包括各种Unix系统、I‘inux、Windows 9x、Windows NT和Mac0S。\r\n\r\n 在风靡了Unix、Linux世界以后,Python由于拥有同Windows应用程序对象模型的简洁接口,也成为Windows程序员创建脚本的新宠。而JPython的出现更使Python成为Java编程环境中的利器。\r\n\r\n 本书是Python语言的经典入门读本,由两名顶尖的Python技术专家兼培训专家联手撰写,涵盖了该语言的所有核心内容。书中的每一章都包含了众多范例,并附有精心编制的习题。由于Python可以像Basic那样交互地运行,读者可以在任何安装了Python的系统中运行这些范例和练习。所有练习的解答都可在书后找到。\r\n\r\n 本书描述了Python程序的基本构件:类型、操作符、语句、函数、模块、类以及异常。此外,本书还介绍了更多高级主题,包括复杂的实例。最后还讲述了如何使用Python定制库来创建大型程序,包括用JPython写的一个实用程序。\r\n\r\n 无论是用于编写简单的脚本,还是复杂的科学计算、Web、数据库、图形和动画程序,Python都已被证明是强大而便利的工具。有本书在手,你可以快速高效地学会使用这门(目前全球炙手可热的)语言。\r\n\r\n “像Python这样灵活的脚本语言,在Industrial Light&Magic公司里是必不可少的工具。”\r\n\r\n---Tommy Burnette\r\n\r\n 技术总监\r\n\r\nIndustial Light & Magic公司 \r\n\r\n\r\n
\r\n
前言 \r\n\r\n 第一部分语言核心 \r\n\r\n 第一章开始 \r\n\r\n 为什么要选择Python? \r\n\r\n 如何运行Python程序? \r\n\r\n 初览模块文件 \r\n\r\n Python设置细节 \r\n\r\n 总结 \r\n\r\n 练习 \r\n\r\n 第二章类型与操作符 \r\n\r\n Python程序结构 \r\n\r\n 为什么要使用内置类型? \r\n\r\n 数字 \r\n\r\n 字符串 \r\n\r\n 列表 \r\n\r\n 字典 \r\n\r\n 元组 \r\n\r\n 文件 \r\n\r\n 共有的对象属性 \r\n\r\n 内置类型的常见问题 \r\n\r\n 总结 \r\n\r\n 练习 \r\n\r\n 第三章基本语句 \r\n\r\n 赋值 \r\n\r\n 表达式 \r\n\r\n print \r\n\r\n if条件测试 \r\n\r\n while循环 \r\n\r\n for循环 \r\n\r\n 代码编写的常见问题 \r\n\r\n 总结 \r\n\r\n 练习 \r\n\r\n 第四章函数 \r\n\r\n 为什么要使用函数? \r\n\r\n 函数基础 \r\n\r\n 函数中的作用域规则 \r\n\r\n 参数传递 \r\n\r\n 其他内容 \r\n\r\n 函数的常见问题 \r\n\r\n 总结 \r\n\r\n 练习 \r\n\r\n 第五章模块 \r\n\r\n 为什么要使用模块7 \r\n\r\n 模块基础 \r\n\r\n 模块文件是名字空间 \r\n\r\n 导入模式 \r\n\r\n 重载模块 \r\n\r\n 其他内容 \r\n\r\n 模块的常见问题 \r\n\r\n 总结 \r\n\r\n 练习 \r\n\r\n 第六章类 \r\n\r\n 为什么要使用类 \r\n\r\n 类的基础知识 \r\n\r\n 使用class语句 \r\n\r\n 使用类的方法 \r\n\r\n 继承搜索名字空间树 \r\n\r\n 在类中重载操作符 \r\n\r\n 名字空间规则总结 \r\n\r\n 用类来设计 \r\n\r\n 其他内容 \r\n\r\n 类的常见问题 \r\n\r\n 总结 \r\n\r\n 练习 \r\n\r\n 第七章异常 \r\n\r\n 为什么要使用异常 \r\n\r\n 异常的基础知识 \r\n\r\n 异常的惯用法 \r\n\r\n 异常捕获模式 \r\n\r\n 其他内容 \r\n\r\n 异常的常见问题 \r\n\r\n 总结 \r\n\r\n 练习 \r\n\r\n 第二部分外围层 \r\n\r\n 第八章内置工具 \r\n\r\n 内置函数 \r\n\r\n 库模块 \r\n\r\n 练习 \r\n\r\n 第九章用Python1完成常见的任务 \r\n\r\n 数据结构操作 \r\n\r\n 文件操作 \r\n\r\n 操作程序 \r\n\r\n 与Internet相关的任务 \r\n\r\n 较大的例子 \r\n\r\n 练习 \r\n\r\n 第十章框架和应用 \r\n\r\n 自动化客户支持系统 \r\n\r\n 与COM的接口:廉价的公共关系 \r\n\r\n 一个基于Tkinter的管理表格数据的编辑器 \r\n\r\n 设计上的考虑 \r\n\r\n JPython:Python和Java的结合 \r\n\r\n 其他的框架和应用 \r\n\r\n 练习 \r\n\r\n 第三部分附录 \r\n\r\n 附录一Python资源 \r\n\r\n 附录二特定平台问题 \r\n\r\n 附录三练习解答 \r\n\r\n 词汇表 \r\n
\r\n
能为读者介绍Python和本书我们感到十分荣幸. Python是一种自由的开放源码的解释性语言, 简单易学又不失严谨, 所以得到初学者和编程专家的共同赞誉. 它像BASIC一样的交互式特点使得它非常容易接近和了解, 很适合于进行快速原型开发, 也适合于教学和程序设计的初学者, 它严谨的模块和对象体系使得它同样适用于大型软件开发.
Python的设计者Guido一开始就很注重它的易学性和可读性, 他还有一个伟大的梦想, 就是保普及读写能力一样普及编程能力, 你也许某一天可以很方便地给自己的手机或微波炉写一段程序.
本书是关于Python的入门和提高的书籍, 原作者富有经验, 书中有大量例子. 练习及答案, 很适合于自学.
本书由陈革和冯大辉先生合作译出, 第一至第五章和附录由冯大辉翻译, 前言和第六至第十章由陈革翻译. 全书的统稿由陈革负责. 感谢中国电力出版社的刘江对本书全稿做了仔细的审校. 译校过程中对原书的一些错误已经做了更正.
我们已竭尽全力保证翻译的质量, 但时间仓促, 错误难免. 对于书中的不足之处敬请读者赐教, 请发邮件到chenge99⑥263. net. 关于本书的更多信息请注意http://pythOnl23. yeah. net.
现在就踏上Python的探索学习之旅吧!
译者
2001年3月
这本书将对Python编程语言做全面而精炼的介绍. Python是一种流行的面向对象语言, 既可用于独立的程序, 也可用于脚本程序, 适用于各种领域. 它是自由的. 可移植的. 强大的, 而且非常易于使用. 无论你是新手还是职业开发者, 本书都将快速地把Python语言的核心介绍给你. 在我们进入细节前, 先在前言里谈谈本书的整体思路.
本书的范围
本书涵盖了Python语言的精华, 但我们的介绍出于速度和篇幅的考虑, 将限制在一个较小的范围, 主要集中于核心概念, 有时谨慎地做了一些简化. 所以本书是一本入门教程, 同时也是更高级. 更复杂课程的铺路石. 例如, 我们将不涉及Python/C的集成——这是一个大而复杂的课题, 有许多大而复杂的例子, 而且对很多基于Python的系统是很重要的. 我们也不会谈论Python社区. 历史以及开发Python的哲学等等. 而对流行的Python应用如GUI(图形用户界面). 系统工具. 网络脚本. 数值计算等, 我们只是在最后作了一个简短的介绍(如果提到了的话), 当然, 这将错过一些重要的东西.
总体来说, Python的宗旨是想提高脚本语言的水平. 它的一些概念需要更多的背景知识, 所以我们建议你在学完本书后要进行更深入的学习. 我们希望本书的读者最终将获得更深入和更完整的理解, 比如通过学习O'Reilly公司出版的《Programming Python》. 再接下去就得研究现实中的例子了(注1).
尽管范围有限(也许正因如此), 你将发现本书非常适合作为学习Python的第一本书. 你将学到用于编写独立程序或脚本程序需要的一切. 学完本书, 你将不仅学到语言本身, 而且知道如何应用在日常的工作中. 碰上更高级的课题你也能应付.
本书的风格
本书大部分内容是以一个三天的Python实践训练课程的材料为基础的. 你将在每一章后面看到练习, 附录三里有每个练习的答案. 练习是为了让你能够立即开始写程序, 而这是本书的一个亮点. 我们强烈推荐你彻底地研究这些练习, 以获得Python编程经验, 练习中还有一些内容是正文里没有讲到的. 如果你在哪儿卡住了, 书后的答案应该是有帮助的. 自然, 你需要安装Python来运行这些练习, 我们很快会讲到如何安装.
本书旨在快速地介绍语言基础, 因此我们按语言的主要特征, 而不是按例子来组织材料. 我们将自底向上介绍:从内置对象类型到语句, 再到程序模块单元等等.
每一章都是基本独立的, 但后面的章节将用到前面介绍的概念(例如我们介绍类时假设你知道如何写函数), 所以按顺序阅读可能最容易理解. 总体来看, 本书分成三个部分:
第一部分:语言核心
书的这一部分自底向上地介绍了Python语言, 每个主要的部件构成了一章(类型. 函数等等), 大多数例子较小, 相对独立(揭示了我们想说明的要点). 这部分占了本书的大部分, 也是本书的重点.
第一章“开始”. 我们以对Python的快速介绍开始, 然后是如何运行Python程序, 以便你可以立刻开始运行例子和练习.
第二章 “类型与操作符”. 接下来, 我们探索Python的主要内置对象类型:数字. 列表. 字典等等. 单凭这些工具你就可以用Python做很多事了.
第三章“基本语句”. 这一章介绍Pytnon的语句——Python里用来创建和处理对象的代码.
第四章“函数”. 本章开始介绍Python的高层结构工具, 函数是一种组织可重用代码的简单方式.
第五章“模块”. Python的模块使你可以把语句和国数组织成大的部件, 本章将介绍如何创建. 使用和重新装入模块.
第六章“类”. 我们将探索Python的面向对象编程(OOP)工具:类. 你将会看到, Python的面向对象编程主要是在链接的对象里查找名字.
第七章“异常”. 这一章介绍了Python的异常处理模型和语句. 这安排在本部分最后一章, 因为如果你愿意的话, 异常可以用类来表示.
第二部分:外围层
在这一部分, 我们展示了Python的内置工具, 并用在一些小的例子程序里.
第八章“内置工具”. 本章介绍了一组模块和函数, 它们包含在缺省的Python安装里. 当然, 你可以把它们当做任何Pytnon用户都可以访问的最小模块组. 了解这些标准工具很可能节省你几周的工作时间.
第九章“用Python完成常见的任务”. 本章介绍了一些较重要的程序. 我们介绍了一些小但有用的程序, 以展示如何把前面介绍的语言核心和内置工具组合起来. 我们介绍了大多数Pytnon用户都感兴趣的三个领域:基本任务. 文本处理和系统接口.
第十章“框架和应用”. 最后一章介绍了如何用标准库和第三方工具做真正的应用, 这一章的程序是最复杂的. 我们最后以对JPython的简短介绍和一个来自实践的例子结束全书, JPython是Python在Java上的移植.
第三部分:附录
本书最后是三个附录, 列出了网上的Python资源(附录一), 给出了特定平台Unix, Windows和Macintosh相关的提示(附录二), 并给出了每章后练习的答案(附录三). O'Reilly(http://www. ora. com)的《Python Pocket Reference》和可自由获取的参考手册(译注1)可作为细节的补充材料.
对读者的要求
实际上没有太多要求. 这是一本入门书, 它也许不太适合从未接触过电脑的人(我们不会花时间解释计算机是什么), 但我们对你的编程背景没有做太多的假设. 另一方面, 我们也没有假设读者是“傻瓜”. 用Python可以很容易地做有意义的事, 我们希望能向你展示如何做. 偶尔我们会把Python与其他语言如C. C++. Pascal 等作比较, 但如果你以前没有用过这些语言, 你完全可以把它们忽略掉.
我们应该失声明的是:Python这个名字是它的创造者Guido van Rossum根据英国广播公司的喜剧系列“Monty Python的飞行马戏团”取出来的. 由于这个原因, 本书的许多例子与这个喜剧有关. 例如, 传统的名字“foo”和“bar”变成了“spam” 和“eggs”. 你用不着熟悉这些喜剧也可以理解书中的例子(符号只是符号而已).
本书更新
本书的更新. 补充和校正都在web上提供, 网址是下列之一:
● http://www. oreilly. com(O'Reilly的网站)
http://rmi. net/~1utz(Mark的网站)
http://starship. skyport. net/一da(Davld的网站)
http://www. python. org(Python的主站)
排版约定
本书中使用如下排版字体约定:
斜体(Italic) 用于文件名和命令名称.
固定宽度(Constant Width) 用于代码实例和代码元素名.
等宽粗体 (constant width bold) 用于在一些代码例子中作强调作用或用户输入.
等宽斜体 (Courier Italic) 用于强调代码段中的那些由工具自动生成的代码.
关于本书的程序
本书及书中的程序基于Python l. 5版, 但由于我们主要是讲语言核心, 我们所讲的大部分在后续版本中不会有太多改变(注2). 本书的大部分也适用于以前的版本. 根据经验, 最新的Python也是最好的. 因为本书主要讲语言核心, 大部分也适用于JPython, JPython是基于Java的Python.
书中的例子. 联系和答案的代码可以从0'Reilly的网站获得:http://www. oreilly. com/catalog/lpython/.
你该怎样运行例子呢?我们将介绍启动Python的细节, 第一步当然是安装Python. 你总可以在Python的主站点www. python. org获得最新和最好的Python版本. 在那里, 你将找到Python的可执行版本(解压缩并运行), 也会找到源代码版本(需要自己编译). 在一些Linux光盘或较厚的Python书附带的光盘上也有Python. 两种版本的安装都有文档, 我们就不多说了, 请看第一章的简略介绍(详细的安装细节参见《Programming Python》一书).
建议与评论
本书的内容都经过测试, 尽管我们做了最大的努力, 但错误和疏忽仍然是在所难免的. 如果你发现有什么错误, 或者是对将来的版本有什么建议, 请通过下面的地址告诉我们:
美国:
O’Reilly&Associates, Inc.
101 MOrris Street
Sebastopo1, CA 95472
中国:
100080北京市海淀区知春路49号希格玛公寓B座809室
奥莱理软件(北京)有限公司
询问技术问题或对本书的评论, 请发电子邮件到:
info@mail. oreilly. com. cn
最后, 你可以在WWW上找到我们:
http://www. Oreilly. com
http://www. Oreilly. com. cn
感谢我们要感谢所有参与完成本书的人. 特别要感谢我们的编辑Frank Willison和O'Reilly. 也要感谢早期参与评审本书的每个人:Eric Raymond, Guido van Rossum, Just van Rossum, Andrew Kuchling, Dennis A11ison, Greg Ward和 Jennifer Tanksley(译注2). 我们要特别感谢Guido van Rossum和Python社区创建了如此有趣和有用的语言. 与大多数自由软件一样, Python是许多英雄努力的成果.
Mark的话:
因为写作《Programming Python》, 使得我有机会周游全国教授Python的初学者. 除了累积起来的飞行距离外, 这些课程帮助我提炼核心的语言材料, 构成了本书的第一部分. 我想感谢参与我早期课程的学生, 你们的反馈对我形成本书的构想十分重要. 我还要特别感谢Softronex, 使我这个夏季有机会在波多黎各教授Python. 最后是一些个人的感谢. 感谢合作者David Ascher, 感谢他的辛勤工作和耐心. 感谢我写本书期间在洛克希德·马丁公司的同事. 感谢Carl Sagan的灵感, 感谢老子的深奥思想. 尤其得感谢我的妻子Lisa和我的孩子——Michael. Samantha和Roxanne, 感谢她们忍耐又一个写作计划. 我还欠孩子们一次旅行呢.
1998年11月
科罗拉多州, Longmont市
David的话:
除了感谢前面列出的人外, 我还想特别感谢几个人. 首先感谢Mark Lutz邀请我与他合作此书, 并大力支持我的工作. 感谢在早期鼓励我的人们, 特别是Guido. Tim Peters. Don Beaudry和Andrew Mullhaupt, 这是一个迟到的感谢.
与Mark一样, 我也开设了教授Python和JPython的课程. 这些课程的学生帮助我发现Python中最难学习的部分(幸运的是并不多), 也提醒我这门语言的令人愉快的一面. 我感谢他们的反馈意见, 我也要感谢那些给予我机会发展这些课程的人们:Jim Anderson(布朗大学), C1iff Dutton(当时他在Distributed Data Systems公司), Geoffrey Philbrick (Hibbitt, Karlsson&Sorensen, Inc. ), Paul Dubois(LawrenceLivermore国家实验室)和Ken Swisz(KLA—Tencor).
感谢我的学科指导教授Jim Anderson. Leslie welch和NorbertoGrzywacz, 他们支持我在Python上的努力, 尤其是这本书, 虽然他们不一定理解我为什么在写这本书, 但仍然信任我.
听我的Python福音的第一批牺牲者忍受了我早期的热情(也许有人说是狂热), 他们应被授予金奖, 他们是:Thanassi Protopapas. Gary Strangman和Steven Finney. Thanassi还为本书的样稿提出了独特而有用的反馈意见.
最后感谢我的家人:我的父母总是鼓励我做想做的事, 我的兄弟Ivan让我想起了最早接触编程的日子, 我的妻子Emily支持并深信我可以写一本书. 谢谢我的儿子Hugo至少是有时候允许我使用键盘. 当我收到Mark关于本书的电子邮件时,
他刚三天大. 现在他已经18个月大了. 真是美妙的一年半.
对本书的读者, 我希望你们能喜欢这本书, 而且通过它喜欢Python语言. 要知道, 通过学习Python, 我自己在计算方面比预期的收获大得多. 我协助写本书的目标也是想给读者带来同样的经验. 如果你学Python的目标是解决一个具体的问题, 我希望Python变得不可见的透明, 让你把精力集中在你的问题上. 然而, 我猜测至少有一些读者会有我发现Python时同样的反应, 发现Python是一个值得进一步学习的世界. 如果你就是这样, 要注意探索Python不一定是一个短时间的过程. 经过了无数小时, 我仍然在四处搜索, 兴趣盎然.
1998年11月
加州, 旧金山