
本书是Python用户的一本百科式学习指南,由Python社区数百名成员协作奉献。全书内容分为三大部分。第一部分是关于如何配置使用Python编辑工具的;第二部分深入学习地道Python风格的代码范例;第三部分研究Python社区常用的一些代码库。本书适合有一定Python基础的人员学习,帮助你迅速从小工修炼成专家,编写出高质量的代码!
译者序 从毕业至今,我在互联网行业从事软件研发工作已将近五年。这五年间,我做过后端开发、前端开发、大数据处理等,使用过的编程语言包括Python、PHP、Go、Java、JavaScript 等。 虽说编程语言各异,但是我使用它们来写各种项目的代码始终坚持两点:代码可读性和自解释性/ 自文档性(self-documentation)。这很大程度上应该是受到Python 语言设计哲学的影响——追求简单、易读、易懂的代码。 很多人可能会认为这两点其实均可归结为代码可读性一点,但我想做点区分。代码可读性突出对代码阅读者视觉上的影响,即在视觉效果上是否存在对阅读者不必要的理解干扰,比如必要的空行、变量定义与使用之间的距离、函数体/ 逻辑分支是否过长、逻辑表达是否直观等。可读性高的代码通常都非常漂亮,令人赏心悦目。自解释性代码则更 侧重语义层面,比如变量名称、函数名称、类名是否恰当,函数、方法、API 职责是否单一,工程目录结构、包、模块拆分是否符合“高内聚、低耦合”原则等。写代码以这两点为原则,可以极大地提高个人以及团队的工作效率和工作质量。 本书作者Kenneth Reitz 于2011 年发布Requests 这个HTTP 请求工具库,提出“forhumans”的理念,强调软件/ 工具库应该友好易用,这一理念本质上是对Python 哲学(特别是上述两点)的一种引申和发扬。之后Reitz 在一些Python 大会上做技术分享,宣扬“for humans”的理念,对Python 社区产生了巨大影响。我在第一次用Requests 库之后, 便很少使用Python 标准库中的urllib 和urllib2 了,现在标准库文档中也特别建议开发者使用Requests。 因为对“for humans”理念的认同,也因为我经常使用Requests,所以当Reitz 在GitHub上邀请我翻译Requests 文档中文版时,我欣然接受,和本书的另一位译者邦杰共同翻译了Requests 文档的首个官方中文版。 在Reitz 发起“The Hitchhiker’s Guide to Python!”项目(也就是本书的社区开源版)后,我一直跟进阅读,收获巨大。后来得知这本开源书籍正式出版,欣喜若狂,辗转咨询多人,联系到刘皎老师,申请了本书的翻译工作。但是,后来发现翻译的工作量远远超出预估,除一些主观原因外,主要因为本书内容的广度和深度。 广度:本书由 Python 社区数百人共同创作而成,可以视作Python 小百科全书。第1~3 章指导读者按照自己的需求选择安装配置Python 版本/ 发行版、开发环境等。第7~11 章则针对不同的应用场景,从多个维度甄选并对比了大量的Python 库,读者可以“按图索骥”地做出自己的选择,从而节约大量的时间精力。因为译者的Python 开发经验主要集中在Web 开发和数据处理上,对于很多应用场景下的Python库不太熟悉,所以翻译之前花费了大量时间来学习和理解。 深度:针对 Python 新手的核心需求,本书探讨了大量的最佳实践。其中第4~5 章通过大量示例具体地阐释了“Python 之禅”:如何编写高质量的Python 代码,并精选若干高质量的知名Python 开源项目,详细介绍如何通过阅读源码来提升编程技术水平。虽说在Python 社区几乎人人都知道“Python 之禅”,但如何落实在开发实践中估计极少有人能说得清楚。对照书中的实例阐释,译者反复推敲“Python 之禅”的译文,最终敲定的译文也不是特别令自己满意。 相比原计划,本书最终延期近一年才翻译完成。除了歉意,我内心满是感谢:感谢邦杰中途友情加入,帮忙翻译了第4~6 章的初稿,这三章的难度和文字量都非常大;感谢编辑刘皎对我拖稿的次次容忍和耐心等待;感谢妻儿的理解,我欠了你们太多的陪伴。 虽然我已尽自己所能地保证译文质量,但是错误和瑕疵难免,在此也请读者原谅。希望你们阅读愉快! 夏永锋 写于上海 前言 Python 是一个大世界,大到让你难以置信! 本书不是教你如何学习Python 语言的(我们引用了大量优秀资源供你学习),而是一份 Python 社区推荐工具和最佳实践的(有态度的)业内指南。本书的目标读者是初级到中 级水平的Python 程序员,他们可能有志于使用Python 为开源项目做贡献、开启一段职 业生涯或开创一家公司,不过临时用用Python 的人也会发现第1 部分和第5 章的内容对 自己颇有帮助。 本书的第1 部分帮助读者选择适合各自场景的文本编辑器或交互式开发环境(例如,常 用Java 的读者可能偏爱Eclipse,用它安装Python 开发插件),并调研了其他可选择的 解释器,这些解释器也许可以满足那些你还不知道的Python 能够解决的需求(例如, MicroPython 是基于ARM Cortex-M4 芯片的一个实现)。第2 部分重点介绍开源社区公 认的范例代码,展示地道的Python 代码风格,希望能够鼓励读者进一步深入阅读和尝试 开源代码。第3 部分简要地调研了大量的Python 社区常用库,让读者初步认识到目前 Python 涉及的领域。 本书纸质版的所有版税都捐赠给Django Girls,这是一个充满欢乐的全球性组织,旨在 组织免费的Django 和Python 讲习班,创建开源的在线教程,策划令人惊叹的技术体验 活动。如果有意愿,那么你可以从http://docs.python-guide.org/en/latest/notes/contribute/ 上了解如何为本书的在线版本做贡献。 xx | 前言 本书的使用约定 这个图标标识一个提示或建议。 这个图标标识一个一般性注解。 这个图标标识一个警告信息。 Safari? 图书在线 Safari? 图书在线是一个点播式电子图书馆,以图书和视频的形式 展示来自技术和商业领域的世界权威作者的专业内容。 技术专家、软件开发者、Web 设计者及商业和创意专业人士都使用Safari? 图书在线作为 科研、解决问题、学习和认证培训的核心资源。 Safari? 图书在线为企业、政府部门、教育机构,以及个人提供一系列的购买计划。 其成员可以访问无数的书籍、培训视频及正式出版前的草稿,这些资源存放在一个 完全可检索的数据库中,资源来源于各大出版商,如O’Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、 Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、 IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、 McGraw-Hill、Jones & Bartlett、Course Technology 等200 多家出版商。更多关于 Safari? 图书在线的信息,请访问https://www.safaribooksonline.com/。 前言 | xxi 联系我们 请将对本书的评价和发现的问题通过如下地址通知出版社。 美国: O’Reilly Media, Inc. 1005 Gravenstein Highway North Sebastopol, CA 95472 中国: 北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035) 奥莱利技术咨询(北京)有限公司 我们提供了本书网页,上面列出了勘误表、示例和其他信息。请通过http://bit.ly/restful- Web-clients 访问该页。 要给出本书意见或者询问技术问题,请发送邮件到bookquestions@oreilly.com。 更多有关书籍、课程、会议和新闻的信息,请见网站http://www.oreilly.com。 在Facebook 找到我们:http://facebook.com/oreilly。 在Twitter 上关注我们:http://twitter.com/oreillymedia。 在YouTube 上观看:http://www.youtube.com/oreillymedia。 致谢 欢迎各位朋友阅读《Python 编程之美:最佳实践指南》。 据我所知,本书的成书方式是首创的:由一个作者(也就是我,Kenneth)设计策划,而 大部分内容由来自世界各地的数百人免费提供。人类有史以来很少有过以这种技术方式 达成这种规模的美妙协作。 本书得以完成,归功于以下3 方的共同努力。 1. 社区 爱把我们凝聚在一起,克服了万千困难。 xxii | 前言 2. 软件项目 Python、Sphinx、Alabaster 和Git。 3. 在线服务 GitHub 和Read the Docs。 最后,我想对Tanya 致以衷心的感谢,她克服了全部的艰难困苦,把这项工作转变成 图书形式,并将一切准备妥当交付出版社正式出版。还有极其出色的O’Reilly 团队: Dawn、Jasmine、Nick、Heather、Nicole、Meg,以及其他许许多多工作在幕后的人, 感谢你们的付出,让本书如此完美。
目录 前言 ........................................................................................... xix 第1 部分 起步 第1 章 选择一个解释器 ........................................................................ 3 Python 2 与Python 3 的状况对比 ..........................................................................3 建议 .......................................................................................................................3 那就选择Python 3 吗 .............................................................................................4 Python 的不同实现 ................................................................................................4 CPython ...........................................................................................................5 Stackless ..........................................................................................................5 PyPy ................................................................................................................5 Jython ..............................................................................................................5 IronPython .......................................................................................................6 PythonNet ........................................................................................................6 Skulpt ..............................................................................................................6 MicroPython ....................................................................................................7 第2 章 恰当地安装Python ................................................................... 9 在Mac OS X 上安装Python ..................................................................................9 Setuptools 和pip ........................................................................................... 11 virtualenv ...................................................................................................... 11 在Linux 上安装Python .......................................................................................12 Setuptools 和pip ...........................................................................................12 开发工具 .......................................................................................................13 virtualenv ......................................................................................................14 在Windows 上安装Python ..................................................................................15 Setuptools 和pip ...........................................................................................17 virtualenv ......................................................................................................17 商业化Python 二次发行版 ..................................................................................18 第3 章 搭建开发环境 ......................................................................... 21 文本编辑器 ..........................................................................................................21 Sublime Text ..................................................................................................22 Vim ................................................................................................................23 Emacs ............................................................................................................25 TextMate........................................................................................................26 Atom .............................................................................................................26 Code ..............................................................................................................26 IDE.......................................................................................................................27 PyCharm/IntelliJ IDEA ..................................................................................28 Aptana Studio 3/Eclipse+LiClipse+PyDev .....................................................29 WingIDE........................................................................................................29 Spyder ...........................................................................................................30 NINJA-IDE ....................................................................................................30 Komodo IDE..................................................................................................30 Eric(Eric Python IDE) .................................................................................31 Visual Studio .................................................................................................31 增强型交互式工具 ...............................................................................................32 IDLE .............................................................................................................32 IPython ..........................................................................................................32 bpython ..........................................................................................................33 环境隔离工具 ......................................................................................................33 虚拟环境 .......................................................................................................33 pyenv .............................................................................................................35 Autoenv .........................................................................................................36 virtualenvwrapper ..........................................................................................36 Buildout .........................................................................................................37 Conda ............................................................................................................38 Docker ...........................................................................................................39 第2 部分 步入正题 第4 章 编写高质量的代码 ................................................................... 43 代码风格 ..............................................................................................................43 PEP 8 .............................................................................................................43 PEP 20(又名Python 之禅) ..........................................................................44 一般性建议 ...................................................................................................45 约定 ...............................................................................................................52 习语 ...............................................................................................................55 常见陷阱 .......................................................................................................58 组织好项目的结构 ...............................................................................................61 模块 ...............................................................................................................61 包 ..................................................................................................................65 面向对象编程 ................................................................................................66 装饰器 ...........................................................................................................67 动态类型 .......................................................................................................68 可变类型和不可变类型 .................................................................................69 管理依赖 .......................................................................................................71 测试代码 ..............................................................................................................72 测试的基础知识 ............................................................................................73 举例说明 .......................................................................................................76 其他流行工具 ................................................................................................80 文档 .....................................................................................................................82 项目文档 .......................................................................................................82 项目配套发行文档 ........................................................................................83 文档字符串与块注释 .....................................................................................84 日志 .....................................................................................................................84 在库中使用logging .......................................................................................85 在应用中使用logging ...................................................................................86 选择许可证 ..........................................................................................................88 上游许可证 ...................................................................................................88 许可证选项 ...................................................................................................89 软件许可相关的学习资源 .............................................................................90 第5 章 阅读高质量的代码 ................................................................... 91 共同特征 ..............................................................................................................92 HowDoI ................................................................................................................92 阅读单文件脚本 ............................................................................................93 取自HowDoI 的结构示例 .............................................................................96 取自HowDoI 的风格示例 .............................................................................97 Diamond ...............................................................................................................99 阅读一个更大的应用程序 .............................................................................99 取自Diamond 的结构示例 .......................................................................... 105 取自Diamond 的风格示例 .......................................................................... 109 Tablib ................................................................................................................. 111 阅读一个小型库 .......................................................................................... 112 取自Tablib 的结构示例 .............................................................................. 115 取自Tablib 的风格示例 .............................................................................. 123 Requests ............................................................................................................. 126 阅读一个更大的库 ...................................................................................... 126 取自Requests 的结构示例 .......................................................................... 130 取自Requests 的风格示例 .......................................................................... 134 Werkzeug ........................................................................................................... 139 阅读一个工具包的代码 ............................................................................... 140 取自Werkzeug 的风格示例 ......................................................................... 148 取自Werkzeug 的结构示例 ......................................................................... 149 Flask................................................................................................................... 156 阅读一个框架的代码 ................................................................................... 156 取自Flask 的风格示例 ................................................................................ 163 取自Flask 的结构示例 ................................................................................ 164 第6 章 交付高质量的代码 ................................................................. 169 有用的词汇和概念 ............................................................................................. 170 打包你的代码 .................................................................................................... 171 Conda .......................................................................................................... 171 PyPI ............................................................................................................. 171 冻结你的代码 .................................................................................................... 174 PyInstaller ................................................................................................... 176 cx_Freeze .................................................................................................... 178 py2app ......................................................................................................... 179 py2exe ......................................................................................................... 180 bbFreeze ...................................................................................................... 181 Linux 已构建分发包的打包技术 ........................................................................ 181 可执行的ZIP 文件 ............................................................................................. 183 第3 部分 场景化指南 第7 章 用户交互 .............................................................................. 187 Jupyter Notebooks 项目 ...................................................................................... 187 命令行应用 ........................................................................................................ 188 图形化用户界面应用 ......................................................................................... 196 窗口部件库 ................................................................................................. 196 游戏开发 ..................................................................................................... 202 Web 应用 ............................................................................................................ 203 Web 框架/ 微框架 ....................................................................................... 203 Web 模板引擎 ............................................................................................. 206 Web 部署 ..................................................................................................... 212 第8 章 代码管理和改进 .................................................................... 215 持续集成 ............................................................................................................ 215 系统管理 ............................................................................................................ 216 服务器自动化 .............................................................................................. 218 系统和任务监控 .......................................................................................... 222 加速 ................................................................................................................... 225 与C/C++/FORTRAN 库进行交互 ............................................................... 235 第9 章 软件接口 .............................................................................. 239 Web 客户端库 .................................................................................................... 240 Web API ...................................................................................................... 240 数据序列化 ........................................................................................................ 245 分布式系统 ........................................................................................................ 248 网络编程 ..................................................................................................... 248 密码技术 ............................................................................................................ 254 第10 章 数据操作 ............................................................................ 261 科学应用 ............................................................................................................ 262 文本操作和文本挖掘 ......................................................................................... 266 Python 标准库中的字符串工具 ................................................................... 266 图像操作 ..................................................................................................... 269 第11 章 数据持久化 ......................................................................... 273 结构化文件 ........................................................................................................ 273 数据库接口库 .................................................................................................... 274 附录A 补充说明 ............................................................................... 289
Kenneth Reitz__eol__Python界的大神、Python软件基金会会员,因众多开源项目而闻名(其中最著名的是“ Requests: HTTP for Humans”),高颜值的摄影爱好者、电子音乐制作师、健身减肥成功的励志男……曾任Heroku公司Python架构负责人,现任职于DigitalOcean。__eol____eol__Tanya Schlusser__eol__数据决策方向的独立顾问,为学生和企业团队提供的数据科学培训时长已超过一千小时,并照顾患有阿兹海默症的妈妈。__eol____eol__夏永锋 __eol__百度资深研发工程师,曾就职于腾讯,对Python、GO、Java开发均有较丰富的实战经验,长期从事后台开发、大数据处理方面的工作,爱好编程和技术翻译。__eol____eol__廖邦杰 __eol__360安全开发工程师,核心安全高级威胁应对团队成员,长期从事后台数据处理及0day漏洞发现工作,在项目开发和安全分析中均涉及大量的Python编程工作。__eol____eol__