首页>参考读物>计算机科学与技术>软件与程序设计

Effective Python:编写高质量Python代码的59个有效方法
作者 : (美)布雷特·斯拉特金(Brett Slatkin)著
译者 : 爱飞翔 译
丛书名 : Effective系列丛书
出版日期 : 2016-01-18
ISBN : 978-7-111-52355-0
定价 : 59.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 224
开本 : 16
原书名 : Effective Python: 59 Specific Ways to Write Better Python
原出版社: Pearson Education Asia
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

图书特色

Google高级软件工程师Brett Slatkin融合自己多年Python开发实战经验,深入探讨编写高质量Python代码的技巧、禁忌和最佳实践
涵盖Python 3.x和Python 2.x主要应用领域,汇聚59条优秀实践原则、开发技巧和便捷方案,包含大量实用范例代码

“Slatkin所写的这本书,其每个条目(item)都是一项独立的教程,并包含它自己的源代码。这种编排方式,使我们可以随意跳读:大家可以按照学习的需要来浏览这些item。本书涉及的话题十分广泛,作者针对这些话题,给出了相当精练而又符合主流观点的建议,我把这本书推荐给中级Python程序员。”
—— Brandon Rhodes,Dropbox的软件工程师、2016至2017年PyCon会议主席

用Python编写程序,是相当容易的,所以这门语言非常流行。但若想掌握Python所特有的优势、魅力和表达能力,则相当困难,而且语言中还有很多隐藏的陷阱,容易令开发者犯错。
本书可以帮你掌握真正的Pythonic编程方式,令你能够完全发挥出Python语言的强大功能,并写出健壮而高效的代码。Scott Meyers在畅销书《Effective C++》中开创了一种以使用场景为主导的精练教学方式,本书作者Brett Slatkin就以这种方式汇聚了59条优秀的实践原则、开发技巧和便捷方案,并以实用的代码范例来解释它们。
Slatkin根据自己在Google公司多年开发Python基础架构所积累的经验,揭示Python语言中一些鲜为人知的微妙特性,并给出了能够改善代码功能及运行效率的习惯用法。通过本书,你能够了解到解决关键编程任务所用的最佳方式,并学会编写易于理解、便于维护且利于改进的代码。

本书核心内容包括:
● 涵盖Python 3.x及Python 2.x主要应用领域的实用指南,以及与之配套的详细解释及代码范例。
● 与函数相关的编程建议,这些建议有助于我们写出意图清晰、便于复用且缺陷较少的函数。
● 如何准确地表达类与对象的行为。
● 在使用元类和动态属性时,如何避免错误的用法。
● 更为高效的并发及并行方式。
● 与Python内置模块相关的编程技巧和习惯用法。
● 多人协作时所用的开发工具和最佳实践方式。
● 旨在改善代码质量和程序性能的调试、测试与优化方案。
作者简介
Brett Slatkin
Google公司高级软件工程师。他是Google消费者调查项目的工程主管及联合创始人,曾从事Google App Engine的Python基础架构工作,并利用Python来管理众多的Google服务器。Slatkin也是PubSubHubbub协议的联合创始人,还用Python为Google实现了针对该协议的系统。他拥有哥伦比亚大学计算机工程专业学士学位。

图书前言

Python编程语言很强大、很有魅力,但同时也很独特,所以掌握起来比较困难。许多程序员从他们所熟悉的语言转入Python之后,没能把思路打开,以致写出的代码无法完全发挥出Python的特性,而另外一些程序员则相反,他们滥用Python的特性,导致程序可能在将来出现严重问题。
本书会深入讲解如何以符合Python风格的(Pythonic)方式来编写程序,这种方式就是运用Python语言的最佳方式。笔者假定你对这门语言已经有了初步了解。编程新手可以通过本书学到各种Python功能的最佳用法,而编程老手则能够学会如何自信地运用一种功能强大的新工具。
笔者的目标是令大家学会用Python来开发优秀的软件。
本书涵盖的内容
本书每一章都包含许多互相关联的条目,大家可以按照自己的需要,随意阅读这些条目。每个条目都包含简明而具体的教程,告诉你应该如何更高效地编写Python程序。笔者在每个条目里面都给出了建议,告诉大家应该怎样做、应该避免哪些用法,以及如何在各种做法之间求得平衡,并解释了笔者所选的做法好在哪里。
本书中的各项条目,适用于Python 3和Python 2(请参阅本书第1条)。对于Jython、IronPython或PyPy等其他运行时环境,大部分条目应该同样适用。
第1章:用Pythonic方式来思考
Python开发者用Pythonic这个形容词来描述具有特定风格的代码。这种风格是大家在使用Python语言进行编程并相互协作的过程中逐渐形成的习惯。本章讲解如何以该风格来完成常见的Python编程工作。
第2章:函数
Python中的函数具备多种特性,这可以简化编程工作。Python函数的某些性质与其他编程语言中的函数相似,但也有些性质是Python独有的。本章介绍如何用函数来表达意图、提升可复用程度,并减少bug。
第3章:类与继承
Python是面向对象的语言。用Python编程时,通常需要编写新类,并定义这些类应该如何通过其接口及继承体系与外界相交互。本章讲解如何使用类和继承来表达对象所应具备的行为。
第4章:元类及属性
元类(metaclass)及动态属性(dynamic attribute)都是很强大的Python特性,然而它们也可能导致极其古怪、极其突然的行为。本章讲解这些机制的常见用法,以确保读者写出来的代码符合最小惊讶原则(rule of least surprise)。
第5章:并发及并行
用Python很容易就能写出并发程序,这种程序可以在同一时间做许多件不同的事情。我们也可以通过系统调用、子进程(subprocess)及C语言扩展来实现并行处理。本章讲解如何在不同情况下充分利用这些Python特性。
第6章:内置模块
Python预装了许多写程序时会用到的重要模块。这些标准软件包与通常意义上的Python语言联系得非常紧密,我们可以将其当成语言规范的一部分。本章将会讲解基本的内置模块。
第7章:协作开发
如果许多人要开发同一个Python程序,那就得仔细商量代码的写法了。即便你是一个人开发,也需要理解其他人所写的模块。本章讲解多人协作开发Python程序时所用的标准工具及最佳做法。
第8章:部署
Python提供了一些工具,使我们可以把软件部署到不同的环境中。它也提供了一些模块,令开发者可以把程序编写得更加健壮。本章讲解如何使用Python调试、优化并测试程序,以提升其质量与性能。
本书使用的约定
本书在Python代码风格指南(Python style guide)的基础上做了一些修改,使范例代码便于印刷,也便于凸显其中的重要内容。一行代码比较长时,会以 字符来表示折行。代码中的某些部分,与当前要讲的问题联系不大,笔者会将这部分代码略去,并在注释中以省略号来表示(# ...)。为了缩减范例代码的篇幅,笔者也把内嵌的文档删去了。读者在开发自己的项目时不应该这么做,而是应该遵循Python风格指南(参见本书第2条),并为源代码撰写开发文档(参见本书第49条)。
书中大部分代码,运行之后都会产生输出(output)。笔者所谓的输出,意思是说:在互动式解释器(interactive interpreter)中运行这些Python程序时,控制台或终端机里面会打印出一些信息。这些打印出来的信息,以等宽字体印刷,它们上方的那一行会标有>>>符号(这个>>>符号是Python解释器的提示符)。笔者使用这个符号是想告诉大家:把>>>上方的那些范例代码输入Python shell之后,会产生与>>>下方文字相符的输出信息。
除此之外,还有一些上方虽无>>>符号,但却以等宽字体印刷的代码段。这些内容用来表示产生于Python解释器之外的输出信息。它们的上方通常都会有$字符,这表示笔者是在Bash之类的命令行shell里面先运行了程序,然后才产生这些输出的。
获取源代码及勘误表
大家可以抛开本书的讲解部分,把某些范例作为完整的程序运行一遍,这样是很有好处的。你可以用这些代码做实验,以了解整个程序的运行原理。全部源码都可以从本书网站(http://www.effectivepython.com/)下载。书中的错误也会张贴到该网站。

专家评论

“Slatkin所写的这本书,其每个条目(item)都是一项独立的教程,并包含它自己的源代码。这种编排方式使我们可以随意跳读:大家可以按照学习的需要来浏览这些条目。本书涉及的话题十分广泛,作者针对这些话题,给出了相当精练而又符合主流观点的建议,我把这本书推荐给中级Python程序员。”
——Brandon Rhodes,Dropbox的软件工程师、2016~2017年PyCon会议的主席

“我用Python写了很多年程序,自认为对python已经了解得很透彻了。但在看过这本讲解诀窍和技巧的好书之后我才发现,其实我还能把Python代码写得更高效(例如,使用内置的数据结构)、更易读(例如,设定只允许通过关键字形式来指定的参数),以令其更加符合Python风格(例如,用zip函数来同时迭代两个列表)。”
——Pamela Fox,Khan学院的教师

“当初我刚从Java转向Python时,要是能先看到这本书的话,那就能节省好几个月的时间。这本书使我意识到:以前反复编写的那些代码,都不是很符合Python的编程风格。这本书包含了Python语言的绝大部分必备知识,使我们无需通过数月乃至数年的艰难探索,即可逐个了解它们。本书的内容非常丰富,从PEP8的重要性和Python语言的主要编程习惯开始,然后谈到如何设计函数、方法和类,如何高效地使用标准库,以及如何设计高质量的API,最后,又讲了测试及性能问题。新手和老手都可以通过这本优秀教程来领略Python编程的真谛。”
——Mike Bayer,SQLAlchemy的创立者
“这本书会清楚地告诉你如何改善Python代码的风格及函数的质量,它会令你的Python技能更上一层楼。”
——Leah Culver,Dropbox的开发者代言人(developer advocate)

“这是一本极好的书,对其他编程语言较有经验的开发者,可以通过本书迅速学习Python,并了解更符合Python风格的基础语言结构。本书内容清晰、简明,而且易于理解,只需阅读某个条目或某一章,即可单独研究某个话题。书中讲解了大量纯Python的语言结构,使读者不会把它们与Python生态圈中的其他复杂事物相混淆。经验更多的开发者可以通过书中提供的一些深度范例来了解自己尚未遇到的语言特性,以及原来不常使用的语言功能。作者肯定是一位非常熟悉Python的人,他用自己丰富的经验来给读者指出各种经常出现的bug以及经常出错的写法。另外,本书也恰当地说明了Python 2.X与Python 3.X之间的微妙区别,大家在各种版本的Python之间迁移时,可以把本书用作参考资料。”
——Katherine Scott,Tempo Automation的软件主管

“这是一本对初级开发者和熟练开发者都适用的好书。代码范例及其讲解都写得非常细致、非常简洁、非常透彻。”
——C. Titus Brown,加州大学戴维斯分校副教授

“这本参考书非常有用,它提供了很多高级的Python用法,并讲解了如何构建更清晰、更易维护的软件。把书中的建议付诸实践,就可以令自己的Python技能得到提升。”
——Wes McKinney,pandas程序库的创立者《Python for Data Analysis》
的作者、Cloudera的软件工程师

上架指导

计算机\程序设计

封底文字

“Slatkin所写的这本书,其每个条目(item)都是一项独立的教程,并包含它自己的源代码。这种编排方式,使我们可以随意跳读:大家可以按照学习的需要来浏览这些item。本书涉及的话题十分广泛,作者针对这些话题,给出了相当精练而又符合主流观点的建议,我把这本书推荐给中级Python程序员。”
——Brandon Rhodes,Dropbox的软件工程师、2016至2017年PyCon会议主席
用Python编写程序,是相当容易的,所以这门语言非常流行。但若想掌握Python所特有的优势、魅力和表达能力,则相当困难,而且语言中还有很多隐藏的陷阱,容易令开发者犯错。
本书可以帮你掌握真正的Pythonic编程方式,令你能够完全发挥出Python语言的强大功能,并写出健壮而高效的代码。Scott Meyers在畅销书《Effective C++》中开创了一种以使用场景为主导的精练教学方式,本书作者Brett Slatkin就以这种方式汇聚了59条优秀的实践原则、开发技巧和便捷方案,并以实用的代码范例来解释它们。
Slatkin根据自己在Google公司多年开发Python基础架构所积累的经验,揭示Python语言中一些鲜为人知的微妙特性,并给出了能够改善代码功能及运行效率的习惯用法。通过本书,你能够了解到解决关键编程任务所用的最佳方式,并学会编写易于理解、便于维护且利于改进的代码。
本书核心内容包括:
● 涵盖Python 3.x及Python 2.x主要应用领域的实用指南,以及与之配套的详细解释及代码范例。
● 与函数相关的编程建议,这些建议,有助于我们写出意图清晰、便于复用且缺陷较少的函数。
● 如何准确地表达类与对象的行为。
● 在使用元类和动态属性时,如何避免错误的用法。
● 更为高效的并发及并行方式。
● 与Python内置模块相关的编程技巧和习惯用法。
● 多人协作时所用的开发工具和最佳实践方式。
● 旨在改善代码质量和程序性能的调试、测试与优化方案。

作者简介

(美)布雷特·斯拉特金(Brett Slatkin)著:暂无简介

译者简介

爱飞翔 译:暂无简介

译者序

自Scott Meyers撰写的《Effective C++》问世以来,出现了很多以Effective命名的技术书籍。Effective一词,并不单单局限于执行速度层面的高效率,同时有着令代码易于阅读、易于测试且易于维护等意思,此外,它还蕴涵着易于扩展、易于修改和易于多人协作等更为高阶的理念。
因此,从上述宏观层面来看,Effective式的心得手册,无论是对初学者还是熟练者,都有较大意义。本书自然也不例外。对于初学者来说,书中展示了该语言的大体轮廓,使我们能够知道Python的强项和弱项。在知道了这些特性之后,开发者就可以结合自己的兴趣与需求,有选择、有顺序地学习。
而对于熟练者来说,则可以把书中的心得与自己的经验相比对,看看自己还有哪些区域尚未深入研究,同时思考一下书中的方案与自己常用的方案各有什么优点与缺点。
从本书各条技巧的具体编排方式来看,本书既可以像字典那样查阅,也可以像普通图书那样通读。很多条目都是用渐进的方式来编写的。作者不会在一开始就给出最佳方案,而是会先从简单的写法入手,逐步发现其缺点并加以完善,最后总结出一套便于使用且易于扩充的解决办法。
这样的演进方式既适用于本书所列的各个场景,也适用于日常的编程工作。如果能通过这些具体的条目来培养一套分析并解决问题的思路,那就可以更加深刻地体会Python语言的设计哲学及实践艺术。很多Python开发者都崇尚Pythonic编程方式,这种Pythonic方式不仅应该体现在代码风格和项目规范之中,而且更应该体现在思维模式和架构设计层面,这一点,我想应该是Effective系列的书籍值得反复品味的缘由吧。
虽说这59条技巧并不能涵盖所有的Python领域,但在经常接触的那几个主要领域中,它们却是相当有代表性和启发性的。我们可以把这些技巧以自己的方式实现出来,并封装成模块及软件包,以便在后续的工作中使用。而对于本书没有专门涉及的领域,如游戏开发、图形绘制、网络通信等,大家不妨也沿用Effective书系的一贯做法,把自己的经验总结成条目,进而以博客或开源项目的形式互相交流。这可以说是对Effective理念的一种延伸和发展。
由于许多Python开发者都同时具备C++及Java等其他语言的开发背景,所以Python中的很多概念都有好几种不同的称呼方式,而这些术语的中文翻译,自然也就呈现出了一词多译的现象。本书将尽量采用较为折中的办法来处理这些问题。
本书的翻译过程中,得到了机械工业出版社华章分社诸位编辑和工作人员的帮助,在此深表谢意。
由于译者水平有限,不足与疏漏之处,请大家发邮件至eastarstormlee@gmail.com,或访问github.com/jeffreybaoshenlee/zh-translation-errata-effective-python/issues留言,给我以批评和指教。该网页还有《中英文词汇对照表》,以供参考。

图书目录

本书赞誉
译 者 序
前  言
致  谢
第1章 用Pythonic方式来思考 1
第1条:确认自己所用的Python版本 1
第2条:遵循PEP 8风格指南 3
第3条:了解bytes、str与unicode的区别 5
第4条:用辅助函数来取代复杂的表达式 8
第5条:了解切割序列的办法 10
第6条:在单次切片操作内,不要同时指定start、end和stride 13
第7条:用列表推导来取代map和f ilter 15
第8条:不要使用含有两个以上表达式的列表推导 16
第9条:用生成器表达式来改写数据量较大的列表推导 18
第10条:尽量用enumerate取代range 20
第11条:用zip函数同时遍历两个迭代器 21
第12条:不要在for和while循环后面写else块 23
第13条:合理利用try/except/else/f inally结构中的每个代码块 25
第2章 函数 28
第14条:尽量用异常来表示特殊情况,而不要返回None 28
第15条:了解如何在闭包里使用外围作用域中的变量 30
第16条:考虑用生成器来改写直接返回列表的函数 35
第17条:在参数上面迭代时,要多加小心 37
第18条:用数量可变的位置参数减少视觉杂讯 41
第19条:用关键字参数来表达可选的行为 43
第20条:用None和文档字符串来描述具有动态默认值的参数 46
第21条:用只能以关键字形式指定的参数来确保代码明晰 49
第3章 类与继承 53
第22条:尽量用辅助类来维护程序的状态,而不要用字典和元组 53
第23条:简单的接口应该接受函数,而不是类的实例 58
第24条:以@classmethod形式的多态去通用地构建对象 62
第25条:用super初始化父类 67
第26条:只在使用Mix-in组件制作工具类时进行多重继承 71
第27条:多用public属性,少用private属性 75
第28条:继承collections.abc以实现自定义的容器类型 79
第4章 元类及属性 84
第29条:用纯属性取代get和set方法 84
第30条:考虑用@property来代替属性重构 88
第31条:用描述符来改写需要复用的@property方法 92
第32条:用__getattr__、__getattribute__和__setattr__实现按需生成的属性 97
第33条:用元类来验证子类 102
第34条:用元类来注册子类 104
第35条:用元类来注解类的属性 108
第5章 并发及并行 112
第36条:用subprocess模块来管理子进程 113
第37条:可以用线程来执行阻塞式I/O,但不要用它做平行计算 117
第38条:在线程中使用Lock来防止数据竞争 121
第39条:用Queue来协调各线程之间的工作 124
第40条:考虑用协程来并发地运行多个函数 131
第41条:考虑用concurrent.futures来实现真正的平行计算 141
第6章 内置模块 145
第42条:用functools.wraps定义函数修饰器 145
第43条:考虑以contextlib和with语句来改写可复用的try/f inally代码 148
第44条:用copyreg实现可靠的pickle操作 151
第45条:应该用datetime模块来处理本地时间,而不是用time模块 157
第46条:使用内置算法与数据结构 161
第47条:在重视精确度的场合,应该使用decimal 166
第48条:学会安装由Python开发者社区所构建的模块 168
第7章 协作开发 170
第49条:为每个函数、类和模块编写文档字符串 170
第50条:用包来安排模块,并提供稳固的API 174
第51条:为自编的模块定义根异常,以便将调用者与API相隔离 179
第52条:用适当的方式打破循环依赖关系 182
第53条:用虚拟环境隔离项目,并重建其依赖关系 187
第8章 部署 193
第54条:考虑用模块级别的代码来配置不同的部署环境 193
第55条:通过repr字符串来输出调试信息 195
第56条:用unittest来测试全部代码 198
第57条:考虑用pdb实现交互调试 201
第58条:先分析性能,然后再优化 203
第59条:用tracemalloc来掌握内存的使用及泄漏情况 208

教学资源推荐
作者: [美]埃里克 S. 罗伯茨(Eric S. Roberts) 著
作者: 钱晓捷 编著
作者: [美]约翰·R. 莱文(John R. Levine) 著
参考读物推荐
作者: (美)Bill Venners
作者: (美)Michael Moncur