前言:
作为一个三观奇正,有志于分享的公众号,奇点在每周五都有“赠书福利”环节,把更多的好书介绍给读者。关注并转发本篇文章,然后将截图发至后台就可以参与抽奖,每周一奇点将会宣布上周幸运读者的名单,请大家持续关注哦,比心~
编辑推荐
本书由Python社区的大神Kenneth Reitz发起并组织编写,由社区数百名开发者集体奉献。最大的特色在于,近乎完整地总结了在Python编程中会用到的各种实践技巧和经验,涵盖众多主流的应用场景,并告诉你如何提高效率、避免踩坑、编写高质量的代码。
本书涉及开发环境和部署、编写符合Pythonic品味的代码、各应用场景下主流的Python解决方案、学习资源推荐等多个方面,有足够的广度也有合适的深度。不仅如此,书中还分享了阅读代码的思路、方法和技巧,告诉你为什么这么设计……并清晰地呈现了项目结构图,有极强的学习价值。
它就像一位导师,从你步入Python编程开发的大门时起,便详细地告诉你哪些应该做,哪些不应该做以及为什么这样选择,如何做技术选型、各自的优缺点……让你在零起步的基础上,便能安心地、迅速地上手实践。
本书不仅适合初学者入门,也适合资深人士作为案头参考。
内容提要
《Python编程之美:最佳实践指南》是Python用户的一本百科式学习指南,由Python社区数百名成员协作奉献。
全书内容分为三大部分。第1部分是关于如何配置和使用Python编辑工具的;第2部分深入讲解地道Python风格的代码范例;第3部分研究Python社区常用的一些代码库。
《Python编程之美:最佳实践指南》适合有一定Python基础的人员学习,帮助你迅速从小工修炼成专家,编写出高质量的代码!
目录
前言 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 Studio3/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
精彩节摘
推荐序一
我从2011 年开始学习和使用Python,印象里那个时候掌握Python 语言基本是BAT 等大型企业岗位要求里面的附加条件。由于Python 语法简单很容易上手,再加上极好的代码可读性、丰富和强大的数据结构和内置标准库、良好的社区生态能极大地提升开发效率等优势,我能清晰感受到这些年Python 越来越受到国内企业和开发者的青睐,而据我所知国内外知名的大型互联网公司或多或少都在使用Python,甚至很多公司的主要技术栈是Python。
作为一个Python 开发者,我非常幸运。因为本书的社区开源项目“The Hitchhiker’s Guide toPython!”也是2011 年由Kenneth Reitz 发起的,虽然我2012 年才知道这个学习指南,但是必须承认书中的内容对我学习和实践Python 有非常大的帮助,直到现在我还是会时常翻阅本书。
和我学习Python 时相比,现在的环境实在好得太多了:有很多Python 书籍、网上资源、国外的视频课程等,但是其中由一线开发者编写、与实践结合、代码能称为“Pythonic”的书籍却凤毛麟角,而这本《Python编程之美:最佳实践指南》就是这样的一本书。它是一本Python 安装、配置和使用的最佳实践手册,涉及开发环境和部署、编写符合Pythonic 品味的代码、各应用场景下主流的Python解决方案、学习资源推荐等多个方面,有足够的广度也有合适的深度。这是我非常喜欢的一种学习指南的写作风格,如果有最佳实践会直接告诉你应该这么做,不应该怎么做,或者会告诉你这个应用场景下都有哪些技术选型,它们各自的优缺点及选择建议。这本书会告诉你怎么用,但是更多的是引路,如果你希望深入学习还是要自己搜索相关资源。
我认为其中最有价值的内容之一是教你编写高质量Python 代码这部分,书中有非常多的场景对应实践及建议,尤其是作者对“Python 之禅”的理解非常透彻,作者的理解和经验对于初学者养成良好的编程习惯,以及培养“Pythonic”品味是非常有意义的。
还有一个章节是教你阅读高质量的代码。成为一名优秀程序员的秘诀之一就是阅读、理解其他优质项目中好的代码,吸收并应用到自己的工作中来。书中列的几个开源项目都是质量非常高的开源项目,在这个章节中作者把自己阅读代码的思路、方法和技巧分享出来,告诉你为什么这么设计,这么做的优点是什么等,而不是只看代码。另外也清晰地把项目结构图呈现出来,有极强的学习价值。
对初学者来说这是一本极佳的学习指南,但是也建议每个Python 开发者都读这本书!最后我也期望国内会有越来越多的一线开发者写技术图书,分享自己使用Python 的相关经验和技巧,让优质的Python书籍越来越多!
董伟明
豆瓣高级产品开发工程师、《Python Web 开发实战》作者
推荐序二
这本书的关键词是“实践”和“指南”。
我曾经被多次拷问:
√“已经学习了Python 基础知识,后续应该做什么呢?”
√“Python 中有那么多模块和包,我应该选择使用哪一个呢?”
√“什么样的代码才是所谓‘优雅’的呢?”
√“怎样提高自己的编程水平?”
√“我不会阅读代码,怎么办?”
√……
对于初学者而言,遇到上述问题很正常,关键是怎么解决问题。
《Python 编程之美:最佳实践指南》一书帮助开发者破解了一些常见疑惑,提供了具有实践价值的指南。
编程,是一个实践性很强的工作。学习了某种语言的基本知识之后,能够写出一些程序,但是否写得好,则是另外一个话题了,况且,实践中也很难确立“好”的标准,如何才能写得“更好”?
一要多写。业精于勤,荒于嬉。不论是各种研究结果还是个人经验,都认同这样的结论:实践性强的技能都要不断地,甚至是重复地做。所以,我经常唠叨“(代)码不离手”,有的人理解、有的人嫌弃、有的人漠视,至少我观察到身边的这三类人在几年之后,他们的“某些属性”的“值”差别不小。
二要思考。行成于思,毁于随。韩愈老先生的两句话,放到这里都很适合。有开发者,写代码多年,但习惯以“时间紧、任务重、给钱少”为思考原点,拒绝主动优化代码——通常老板也不给时间优化代码,你手不在敲代码,他就在亏钱。结果,本来是以智力活动为主的“开发者”,在主客观因素的裹挟下成了以机械操作为主的“搬砖工”,因此慨叹“程序员是吃青春饭的”。所幸,在本书中有“编写高质量的代码”“阅读高质量的代码”“交付高质量的代码”三方面的内容,为我们提供了一个“思考”的范例。高质量的代码绝非一朝一夕能够实现的,需要长期积淀。如此,“年龄”就不再是开发者的魔障了。
三要学习。学而不思则罔,思而不学则殆。学习的方式有多种,“读书”则是一种重要的方式,相比“碎片化”学习的一知半解,完整地读一本书则会让开发者在思维、知识、技能等维度有系统地提升。比如本书中的“高质量的代码”部分不仅仅是实践经验的总结,也应该是开发者的行动指南;而在第三部分“场景化指南”中,则为开发者较为系统地列举了各种应用场景中会用到的工具——名为“指南”,很恰当。
就个人来看,本书比较适合“入门”之后阅读,读者可以根据具体的应用场景循“指南”而深入。
齐伟
“跟老齐学Python”系列图书作者
推荐序三
判断一门编程语言是不是流行,可以观察该语言相关图书的多寡,虽然市面上已有众多Python 相关的书籍,但我仍有充分的理由来推荐本书,原因如下。
第一,本书的作者之一Kenneth Reitz 先生是大名鼎鼎的Requests库的作者,仅凭此一点,本书的质量就有了充分的保证。
第二,根据本人多年从事软件开发和Python 培训的经验,很多通过自学或培训、刚刚转行成功的程序员,虽然学会了用写代码来解决具体问题,但对下一步的学习和成长方向比较迷茫。如果在这个阶段能在公司遇到一位好的导师,那么三生有幸,他会引导你快速地成长,独立上手开发项目。但是,如果没有遇到这样的导师,又该怎么办呢?这本《Python 编程之美:最佳实践指南》刚好可以履行起这样一位导师的职责:书中丰富的内容、详尽的指导能让你快速补上运用Python 开发项目的知识短板。
第三,本书用两章的篇幅着重阐述了如何编写、阅读高质量的代码,这对于每一位Python 开发人员都是极有价值的。
在第4 章“编写高质量的代码”中,作者从代码风格、组织好项目的结构、测试代码、文档、日志等方面全面讲解如何写出高质量的代码。刚踏入软件开发的朋友们,如果还没有养成写测试、日志的习惯,完全可以从这里完整地补充相关知识点。
在第5 章“阅读高质量的代码”中,按照第4 章编写高质量的代码的原则,引导读者阅读6 个优秀的项目(HowDoI、Diamond、Tablib、Requests、Werkzeug、Flask),学习开源项目的架构设计、书写Python 风格的代码——小到命名风格、大到实现特定需求的数据结构和算法等。
本书还简明扼要地阐述了软件交付、Web 应用、持续集成、分布式系统等方面的知识,虽然不是特别详细,但足以引导读者了解Python 项目开发的方方面面,对Python的开发过程有全局、清晰的认识。此外,读者还可以借助本书提供的资源链接,运用搜素引擎来拓展自己的知识面。
综上,我认为本书值得每一位初级程序员拥有,如果读者能把从中学到的知识娴熟地应用到日常开发中,那么个人成长的价值就远远超出本书微薄的定价了。
黄哥
知乎专栏“通过Python 学会编程”作者
作者简介
Kenneth Reitz
Python界的大神、Python软件基金会会员,因众多开源项目而闻名(其中最著名的是“ Requests: HTTP for Humans”),高颜值的摄影爱好者,电子音乐制作师,健身减肥成功的励志男……曾任Heroku公司Python架构负责人,现任职于DigitalOcean。
Tanya Schlusser
数据决策方向的独立顾问,为学生和企业团队提供的数据科学培训时长已超过1000小时,并照顾患有阿兹海默症的妈妈。
译者简介
夏永锋百度资深研发工程师,曾就职于腾讯,对Python、GO、JAVA开发均有较丰富的实战经验,长期从事后台开发、大数据处理方面的工作。爱好编程和技术翻译。
媒体评论
书中的内容对我学习和实践Python有非常大的帮助。
——董伟明
豆瓣高级产品开发工程师、《Python Web开发实战》作者
本书是Python开发者的实操指引,Kenneth Reitz 出品,必属精品。
——刘志军
公众号“Python之禅”出品人
本书追根溯源,从代码风格、设计哲学、开源项目等各方面为我们详述了Python强大的生态系统,书名中的“最佳实践指南”名副其实。
——阿橙
公众号“Python中文社区”主编
本书不仅仅是一本Python教程,更多的是通过一些优秀项目源码,向读者阐释了如何写出更优雅的Python代码……有助于Python学习者完成向 Pythonic 的转变。
——Crossin 公众号“Crossin的编程教室”作者、码课创始人
《Python编程之美:最佳实践指南》一书帮助开发者破解了一些常见疑惑,提供了具有实践价值的指南。
——齐伟“跟老齐学Python”系列图书作者
学习一门编程语言,从入门到进阶的一条捷径就是学习前辈专家的开发经验,而这本书正是这些专家经验的总结。
——杨学光 Django中文社区发起人
这真是一本令人惊叹的好书!它并不是教授Python语言本身的,而是假定你已经有了一定的编程基础。它阐述的是编程相关的知识点:何时、何地、怎样运用Python,如何使用各类Python工具……这使得你可以高效地编写代码、运维程序,并与其他程序优雅的交互。
——读者来自amazon.com
精炼且详略得当,这本《Python编程之美:最佳实践指南》一定会让你深入了解Python大世界。
——Raymond Hettinger,杰出的Python核心开发者
本书是Python开发必备。对于新手来说,它是一份记录社区约定和最佳实践的学习资源,其价值不可估量。
——Eric Holscher,Read the Docs公司(readthedocs.org)的联合创始人
前言
译者序
从毕业至今,我在互联网行业从事软件研发工作已将近五年。这五年间,我做过后端开发、前端开发、大数据处理等,使用过的编程语言包括Python、PHP、Go、Java、JavaScript 等。
虽说编程语言各异,但是我使用它们来写各种项目的代码始终坚持两点:代码可读性和自解释性/ 自文档性(self-documentation)。这很大程度上应该是受到Python 语言设计哲学的影响——追求简单、易读、易懂的代码。
很多人可能会认为这两点其实均可归结为代码可读性一点,但我想做点区分。代码可读性突出对代码阅读者视觉上的影响,即在视觉效果上是否存在对阅读者不必要的理解干扰,比如必要的空行、变量定义与使用之间的距离、函数体/ 逻辑分支是否过长、逻辑表达是否直观等。可读性高的代码通常都非常漂亮,令人赏心悦目。自解释性代码则更侧重语义层面,比如变量名称、函数名称、类名是否恰当,函数、方法、API 职责是否单一,工程目录结构、包、模块拆分是否符合“高内聚、低耦合”原则等。写代码以这两点为原则,可以极大地提高个人以及团队的工作效率和工作质量。
本书作者Kenneth Reitz 于2011 年发布Requests 这个HTTP 请求工具库,提出“for humans”的理念,强调软件/ 工具库应该友好易用,这一理念本质上是对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 章的初稿,这三章的难度和文字量都非常大;感谢编辑刘皎对我拖稿的次次容忍和耐心等待;感谢妻儿的理解,我欠了你们太多的陪伴。
虽然我已尽自己所能地保证译文质量,但是错误和瑕疵难免,在此也请读者原谅。希望你们阅读愉快!
夏永锋
写于上海
关注公众号并转发本篇文章到朋友圈,截图后发给后台就可以参与本次“赠书福利”,下周一奇点将会把幸运用户的名单公布,请大家持续关注哦~
迫不及待想看到书中内容的小伙伴们可以扫描下方二维码购买本书,比心~