本书是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,以及其他许许多多工作在幕后的人,
感谢你们的付出,让本书如此完美。
**for docopt import docopt
改为
from docopt import docopt