前言

前言

欢迎各位读者打开本书

很高兴各位读者能够允许我们来帮助你们尽可能快、尽可能深入地学习Python。Core Python系列图书的目标不只是教会开发人员Python语言,我们还希望各位读者能够形成足够的知识库,从而能够开发任何应用领域的软件。

在其他的Core Python系列图书(Core Python ProgrammingCore Python Language Fundamentals)中,我们不仅向读者讲授Python语言的语法,还希望读者能够深入掌握Python的运行机制。我们相信,在具备了这些知识之后,无论你是Python语言的初学者还是资深程序员,都能够开发出更为高效的Python应用程序。

在学完任何其他入门类的Python图书之后,你可能觉得已经掌握了Python而且还觉得学得不错,并为此感到自豪。通过完成大量练习之后,你将会对自己新掌握的Python编程技能拥有更多信心。但是,你可能仍然会有这样的疑问,“现在该怎么办?我能用Python编写哪种类型的应用程序呢?”或许你是为了一个相当小众的工作项目而学习使用Python,你可能会考虑“我还能用Python写点其他的吗?”

关于本书

在本书中,你将会用到从其他地方学习到的所有Python知识,并培养新的技能,从而构建自己的工具箱。借助于该工具箱,你能够使用Python开发各种类型的应用程序。关于高级主题的章节旨在快速概述各种不同的主题。如果你开始转向这些章节中涵盖的特定应用开发领域,你将会发现它们不仅给出了正确的方向,还包含了更多的信息。但是不要期待有一个深入的解决方案,因为这有悖于本书的初衷—提供更为广泛的解决方案。

与其他所有Core Python图书一样,本书同样包含了许多示例,你可以在计算机上进行尝试。为了牢固掌握概念,你也会在每章最后发现有趣、有挑战性的练习。这些初级和中级难度的练习旨在测试你的知识掌握情况,提升你的Python技能。毕竟,没有什么可以替代实践经验。我们相信,你不仅能够学到很多Python编程技能,同时还能在尽可能短的时间内迅速掌握它们。

对我们来讲,扩展Python技能的最佳方式就是动手练习,因此你会发现这些练习是本书的一个最大优势。它们可以测试你对每章主题和定义的掌握情况,并激励你尽可能多地动手编程。除了自己编写应用程序之外,没有其他方法可以更有效地提升你的编程技能。你需要解决初级、中级和高级难度的编程问题。而且你应该需要编写一个大型的应用程序(这也是很多读者想要在本书中看到的),而不是采用一些脚本来实现。坦白说,你可能做得没有那么好,但是通过亲自动手实践,你的收获会更大。附录A给出了每章中某些练习的答案。附录B包含了一些有用的参考表。

感谢所有读者的反馈和鼓励,你们是我写作这些图书的动力。希望你们能继续给我发送反馈信息,并促使本书第4版尽快问世,而且其质量优于之前所有版本。

本书读者对象

如果你之前了解Python,并且希望进一步了解Python,同时希望扩展自己的应用程序开发技能,你就是本书的读者对象。

在众多领域中都可见Python的身影,包括工程领域、信息技术领域、科学领域、商业领域和娱乐领域等。这意味着Python用户(和本书的读者)列表包括但不限于下述人员:

  • 软件工程师;

  • 硬件设计/CAD工程师;

  • QA/测试和自动化框架开发人员;

  • IS/IT/系统和网络管理员;

  • 科学家和数学家;

  • 技术或项目管理人员;

  • 多媒体或音频/视觉工程师;

  • SCM或发布工程师;

  • Web大师或内容管理人员;

  • 客户/技术支持工程师;

  • 数据库工程师和管理员;

  • 研发工程师;

  • 软件集成和专业服务人员;

  • 大学及中学教育工作者;

  • Web服务工程师;

  • 金融软件工程师;

  • 其他人员。

使用Python的一些著名公司包括Google、Yahoo!、NASA、卢卡斯工业光魔公司、Red Hat、Zope、迪士尼、皮克斯和梦工厂。

作者与Python

大约10多年以前,我在一家名为Four11的公司接触到Python。当时,该公司有一个主要的产品——Four11.com White Page目录服务。它们使用Python来设计该产品的下一代:Rocketmail Web E-mail服务,该服务最终演变为今天的Yahoo!Mail。

学习Python并加入最初的Yahoo!Mail工程团队是一件相当有趣的事情。我帮助重新设计了地址簿和拼写检查程序。在当时,Python也成为其他Yahoo!站点的一部分,其中包括People Search、Yellow Pages、Maps和Driving Directions等。事实上,我当时是People Search部门的首席工程师。

尽管在当时Python对我而言是全新的,但是它也很容易学习—比我过去学习的其他语言都要简单。在当时,Python教程的缺乏迫使我使用Library Reference和Quick Reference Guide作为主要的学习工具,而这也是促使我写作本书的一个驱动力。

从我在Yahoo!的日子开始,我能够以各种有趣的方式在随后的工作中使用Python。在任何情况下,我都能使用Python的强大功能来及时地解决遇到的问题。我也开发了多门Python课程,并使用本书来讲授那些课程—完全使用自己的作品。

Core Python图书不仅是卓越的Python学习资料,它们还是用来讲解Python的最佳工具。作为一名工程师,我知道学习、理解和应用一种新技术所需要的东西。作为一名专业讲师,我也知道为客户提供最有效的会话(session)所需要的是什么。这些图书栩栩如生,同时包含你无法从“纯粹的培训师”或“纯粹的图书作者”那里获得的提示。

对本书写作风格的期待:以讲解技术为主,同时容易阅读

不同于严格的“入门”图书或者纯粹的“重口味”计算机科学参考图书,我过去的教学经验告诉我,一本易于阅读同时又面向技术的图书应该服务于这样的一个目的,即能够让人尽可能迅速地掌握Python,以便能将其应用到十万火急的任务上来。我们在介绍概念时会辅之以合适的案例,以加速学习过程。每章最后都会给出大量练习,旨在夯实你对书中概念和理念的理解。

能够与Bruce Eckel的写作风格相提并论,我很激动也很谦卑(见本书第1版的评论,网址为http://corepython.com)。本书并非一本枯燥的大学教材,我们的目标是营造一个与你交谈的环境,就像你是在参加我的一个广受好评的Python培训课程一样。作为一名终身学习的学生,我不断地因材施教,告诉你需要学习什么才能快速、彻底地掌握Python的概念。你也将发现,可以快速、轻松地阅读本书,而且不会错失任何技术细节。

作为一名工程师,我知道应该怎样做才能向你讲授Python中的概念。作为一名教师,我可以将技术细节全部打散,然后转换成一种易于理解和迅速掌握的语言。你将从我的写作风格和教学风格中获益,更重要的是,你会喜欢上用Python来编程。

因此,你也将注意到,尽管我是本书唯一的作者,但是我使用的是“第三人称”的写作风格,也就是说,我使用了诸如“我们”这样的一些废话,原因是在学习本书的过程中,我们是一起的,共同朝着扩展Python编程技能的目标而努力。

关于本书第3版

在本书第1版刚问世时,Python刚发布了2.0版本。从那时起,Python语言发生了重大的改进,Python语言被越来越多的人接受,其使用率也大幅提升。Python编程语言大获成功。Python语言的缺陷已被删除,而且有新的特性不断加入,这将全世界Python开发人员的能力和编程修养提升到了一个新的水平。本书第2版于2006年问世,当时也是Python的鼎盛时期,它的版本是迄今为止最为流行的2.5版本。

本书第2版问世之后好评如潮,其销量超过了第1版。在那期间,Python本身也赢得了无数荣誉,包括下面这些。

  • Tiobe(www.tiobe.com
    ——年度编程语言(2007年、2010年)

  • LinuxJournal(linuxjournal.com)
    ——最喜欢的编程语言(2009~2011年)
    ——最喜欢的脚本语言(2006~2008年、2010年、2011年)

  • LinuxQuestions.org会员选择奖
    ——年度编程语言(2007~2010年)

这些奖项和荣誉推动着Python进一步发展。现在,Python已经进入了下一代:Python 3。同样,本书也在向着其“第三代”前进。我非常高兴Prentice Hall能够让我写作本书第3版。由于Python 3.x版本不能够后向兼容Python 1和Python 2,因此还需要一段时间,Python 3.x才能被业界全面采用和集成进来。我们很乐意引导你经历这个过渡。本书第3版的代码也适用于Python 2和Python 3(视情况而定——并非所有代码都移植了过来)。在移植代码时,我们还会讨论各种工具和做法。

Python 3.x版本带来的挑战延续着对Python编程语言进行迭代和改进的趋势,要移除Python语言最后的重大缺陷还有很长的路要走,而且在不断演变的Python语言中移除重大缺陷也是一个相当大的飞跃。与之相似,本书的结构也做出了相当重大的转变。限于篇幅和范围,已出版的第2版无法处理第3版中引入的所有新内容。

因此,Prentice Hall和我想到了一个好方法来向前推进本书,即从逻辑上将其拆分为两部分,其中一部分讲述Python核心语言主题,另一部分讲述高级应用主题,并由此将书拆分为两卷。而你手头上当前拿着的这本书是Core Python Programming(第3版)的第二部分。好消息是由于第二部分的内容已经相当完整齐备,因此第一部分的内容也就没有存在的必要了。要阅读本书,我们建议读者能够拥有Python中级编程经验。如果你最近已经学过Python,而且能够相当轻松地驾驭它,或者你已经具备Python技能,但是希望能进一步提升该技能,那么你算是找对图书了。

Core Python Programming的读者都知道,我的主要目标是以一种全面的方式来讲解Python语言的本质,而非仅仅是其语法(学习Python的语法貌似也不需要一本书)。在知道了Python的工作机制之后—包括数据对象和内存管理之间的关系—你将成为一名更高效的Python程序员。而这是第一部分(即Core Python Language Fundamentals)要做的工作。

与本书所有版本一样,我会继续更新图书的Web站点以及博客,以确保无论你移植到哪个新发布的Python版本,都可以让本书做到与时俱进。

对之前的读者来说,本书第3版新增了下述主题:

  • 基于Web的E-mail示例(第3章);

  • 使用Tile/Ttk(第5章);

  • 使用MongoDB(第6章);

  • 更重要的Outlook和PowerPoint示例(第7章);

  • Web服务器网关接口(WSGI)(第10章);

  • 使用Twitter(第13章);

  • 使用Google+(第15章)。

此外,我们还在当前版本中添加了全新的3章,分别是第11章、第12章和第14章。这几章代表着经常使用Python进行应用开发的一些新领域或正在进行的领域。所有的现有章节已经焕然一新,并更新到Python的最新版本,同时还包含了一些新内容。通过随后的“章节指南”部分,你可以了解到本书每部分要讲解的内容。

章节指南

本书分为3部分。其中第1部分占据了本书2/3的篇幅,它讲解了应用开发工具箱中(当然,Python是关注重点)“核心”成员的解决方案。第2部分讲解了与Web编程相关的各种主题。第3部分是补充部分,它提供了一些仍然在开发过程中的实验章节,在本书后续版本中,这些章节有望成为独立的章节。

本书提供了一些高级主题,以展示Python可以用来开发什么应用程序。值得高兴的是,本书起码可以向你提供Python开发中许多关键领域的入门知识,其中包括之前版本中提到的一些主题。

下面是本书每章的内容简介。

第1部分:通用应用主题

第1章——正则表达式

正则表达式是一种功能强大的工具,它可以用来进行模式匹配、提取、查找和替换。

第2章——网络编程

如今许多应用都是面向网络的。该章将介绍如何使用TCP/IP与UDP/IP来创建客户端和服务器,以及如何快速入门SocketServer和Twisted。

第3章——因特网客户端编程

如今在用的大多数Internet协议都是使用套接字开发的。该章将探究一些用来构建Internet协议客户端的高级库。该章重点讨论的是FTP、Usenet消息协议(NNTP)以及各种E-mail协议(SMTP、POP3及IMAP4)。

第4章——多线程编程

多线程编程是一种通过引入并发来提升多种应用程序执行性能的方式。该章通过解释概念并展示正确创建Python多线程应用程序的方法、什么是最佳用例来讲解如何在Python中实现线程。

第5章——GUI编程

Tkinter(在Python 3中重名为tkinter)以Tk图形工具包为基础,是Python中的默认GUI开发库。该章通过演示如何创建简单的GUI应用来介绍Tkinter。一种最佳的学习方式是复制,并在某些应用的顶层进行创建,这样可以很快上手。该章最后简要讨论其他图形库,比如Tix、Pmw、wxPython、PyGTK和Ttk/Tile。

第6章——数据库编程

Python也有助于简化数据库编程。该章首先回顾一些基本概念,然后介绍Python数据库应用编程接口(DB-API)。随后介绍如何使用Python连接到关系数据库,并执行查询和操作。如果你更喜欢使用结构化查询语言(SQL)的放手管理方法(hands-off approach),而且只是想在无须考虑底层数据库层的情况下处理对象,则可以使用对象-关系映射。最后,该章以MongoDB作为NoSQL示例介绍了非关系数据库。

第7章——Microsoft Office编程

无论喜欢与否,我们都生活在一个不得不和Microsoft Windows PC打交道的世界。我们可能偶尔与它们打交道,也可能每天都要接触到它们,但是无论处于哪种情况下,都可以使用Python的强大功能来让生活更轻松一些。该章将探究使用Python来编写COM客户端,以控制Office应用程序(比如Word、Excel、PowerPoint和Outlook)并与它们进行通信。尽管该章在本书之前版本中是实验章节,但是我们很高兴能够为其添加足够的内容,使其单独成章。

第8章——扩展Python

前面提到,能够重用代码并对语言进行扩展将具有相当强大的功能。在纯Python中,这些扩展是模块和包,但是你也可以使用C/C++、C#或Java来开发底层的代码。这些扩展能够以无缝方式与Python相接。用低级编程语言来编写自己的扩展可以提升性能,并增强安全性(因为源代码没有必要泄露)。该章讲解使用C语言来开发扩展的整个过程。

第2部分:Web开发

第9章——Web客户端和服务器

该章将扩展第2章讨论的客户端/服务器架构,我们将这一概念应用到Web上。该章不仅探究客户端,还介绍用来解析Web内容的各种Web客户端工具。最后,该章介绍如何使用Python来定制自己的Web服务器。

第10章——Web编程:CGI和WSGI

Web服务器的主要工作是接受客户端的请求,然后返回结果。但是服务器如何获得客户端的请求数据呢?由于服务器只擅长返回结果,因此它们通常没有获取数据的能力或逻辑,于是这个工作需要在他处完成。CGI给了服务器生成另外一个程序的能力,让这个程序来进行数据处理(长久以来一直也是这么做的),但是该程序不具备扩展性,因此并不会在实践中使用。但是,无论使用的是什么框架,这一概念仍然适用,因此我们将用一章的篇幅来学习CGI。该章介绍WSGI如何通过通用编程接口来为应用开发人员提供帮助。此外,该章还将介绍当框架开发人员需要在一端连接Web服务器而应用程序的代码放在另外一端时,WSGI如何提供帮助,以便应用开发人员能够在无须担心执行平台的情况下编写代码。

第11章——Web框架:Django

Python有很多Web框架,Django是其中最为流行的一个。该章介绍这个框架,然后介绍如何编写简单的Web应用。在具备了这些知识后,你可以自行研究其他Web框架。

第12章——云计算:Google App Engine

云计算在IT业界引发了轰动。尽管像Amazon的AWS这样的基础设施服务和Gmail、Yahoo!Mail这样的在线应用等在当今世界中更为常见,但是有很多平台凭借其强大的功能,成为这些服务的替代者。这些平台充分利用了基础设施,无须用户介入,而且要比云软件具有更多的灵活性,原因是你可以自行控制应用及其代码。该章全面介绍使用Python的第一个平台服务——Google App Egnine。在掌握了该章的内容后,你可以探讨该章介绍的其他类似服务。

第13章——Web服务

该章介绍Web上的高级服务(使用HTTP)。该章先介绍一个较为古老的服务(Yahoo!Finance),然后再给出一个较新的服务(Twitter)。该章讨论如何使用Python以及前面学到的知识来与这些服务进行交互。

第3部分:补充/实验章节

第14章——文本处理

这是本书的第一个补充章节,它介绍使用Python来处理文本的方法。该章先介绍CSV,然后是JSON,最后是XML。在该章最后一节,我们将前面学到的客户端/服务器知识融合到XML中,以查看如何使用XML-RPC来创建在线的远程过程调用(RPC)。

第15章——其他内容

该章包含一些附加材料,这些内容可能会在本书下一版中成为单独的章节。该章讨论的主题包含Java/Jython和Google+。

图书资源

我们欢迎任何形式的读者反馈。如果你有任何意见、建议、投诉、抱怨、bug,甚至任何事情,请通过corepython@yahoo.com与我联系。

在本书的Web站点(http://corepython.com)上,你可以找到勘误表、源代码、更新、即将举行的会谈、Python培训、下载地址和其他信息。在本书的Google+页面(http://plus.ly /corepython),你可以参与和本书有关的社区讨论。

致谢

本书第3版的致谢

审稿人和贡献人

Gloria Willadsen(首席审稿人)

Martin Omander(审稿人兼第11章、15.2节的合著者)

Darlene Wong

Bryce Verdier

Eric Walstad

Paul Bissex(Python Web Development with Django一书的合著者)

Johan “proppy”Euphrosine

Anthony Vallone

献辞

感谢我的妻子Faye,无论我在路上开车时,还是在家埋头写作时,她总是将家庭照顾得井井有条,娴熟照顾孩子的起居和作息,并妥善处理家庭各种开支,因此她总是能够不断给我惊喜。

编辑

Mark Taub(总编辑)

Debra Williams Cauley(策划编辑)

John Fuller(执行编辑)

Elizabeth Ryan(项目编辑)

Bob Russell,Octal Publishing公司(文字编辑)

Dianne Russel,Octal Publishing公司(产品与管理服务)

本书第2版的致谢

审稿人和贡献人

Shannon –jj Behrens(首席审稿人)

Michael Santos(首席审稿人)

Rick Kwan

Lindell Aldermann(第6章Unicode小节的合著者)

Wai-Yip Tung(第20章Unicode案例的合著者)

Eric Foster-Johnson(Beginning Python一书的合著者)

Alex Martelli(Python Cookbook一书的编辑以及Python in a Nutshell一书的合著者)

Larry Rosenstein

Jim Orosz

Krishna Srivivasan

Chuck Kung

献辞

感谢我的孩子!

本书第1版的致谢

审稿人和贡献人

Guido van Rossum(Python语言的创始人)

Dowson Tong

James C. Ahlstrom(Internet Programming with Python一书的合著者)

S. Candelaria de Ram

Cay S. Horstmann(Core Java一书和Core JavaServer Faces一书的合著者)

Michael Santos

Greg Ward(distutils包及其文档的创始人)

Vincent C. Rubino

Martijn Faassen

Emile van Sebille

Raymond Tsai

Albert L. Anders(MT Programming章节的合著者)

Fredrik Lundh(Python Standard Library一书的合著者)

Cameron Laird

Fred L. Drake, Jr.(Python & XML一书的合著者以及Python官方文档的编辑)

Jeremy Hylton

Steve Yoshimoto

AahzMaruch(Python for Dummies一书的合著者)

Jeffrey E. F. Friedl(Mastering Regular Expressions一书的合著者)

Pieter Claerhout

Catriona(Kate)Johnston

David Ascher(Learning Python一书的合著者以及Python Cookbook一书的编辑)

Reg Charney

Christian Tismer(Stackless Python的创始人)

Jason Stillwell

我在加州大学圣克鲁兹分校的学生

献辞

非常感谢我的高中编程老师James P. Prior。

感谢Louise Moser和P. Michael Melliar-Smith(我在加州大学圣巴巴拉分校的研究生论文导师),向两位致以我最深切的感激之情。

感谢Alan Parsons、Eric Woolfson、Andrew Powell、Ian Bairnson、Stuart Elliott、David Paton以及其他项目参与人员,感谢我的Projectologists和Roadkillers同伴,谢谢你们的音乐、支持和陪伴。

还要感谢我的家人、朋友和上帝,在我过去的疯狂岁月和长途奔袭中,是他们让我保持安全和理智。还要感谢在过去20多年以来一直对我深信不疑的人—没有你们,我将无法坚持下来。

最后,还要感谢我的读者以及Python社区。能够教你Python编程,我非常激动,也希望你能在阅读本书的过程中能体验到学习的乐趣。

Wesley J. Chun

加州硅谷

目录

  • 版权
  • 版权声明
  • 内容提要
  • 本书赞誉
  • 关于作者
  • 前言
  • 第1部分 通用应用主题
  • 第1章 正则表达式
  • 第2章 网络编程
  • 第3章 因特网客户端编程
  • 第4章 多线程编程
  • 第5章 GUI编程
  • 第6章 数据库编程
  • 第7章 *Microsoft Office编程
  • 第8章 扩展Python
  • 第2部分 Web开发
  • 第9章 Web客户端和服务器
  • 第10章 Web编程:CGI和WSGI
  • 第11章 Web框架:Django
  • 第12章 云计算:Google App Engine
  • 第13章 Web服务
  • 第3部分 补充/实验章节
  • 第14章 文本处理
  • 第15章 其他内容
  • 附录A 部分练习参考答案
  • 附录B 参考表
  • 附录C Python 3:一种编程语言进化的产物
  • 附录D 利用Python 2.6+向Python 3迁移
  • 欢迎来到异步社区!

相关技术

推荐用户