Python中文网

编程书籍推荐:Effective Python:编写高质量Python代码的59个有效方法,由机械工业出版社2016-01-01月出版,本书发行作者信息: [美] 布雷特·斯拉特金 著,爱飞翔 译此次为第1次发行, 国际标准书号为:9787111523550,品牌为机工出版, 这本书采用平装开本为16开,附件信息:未知,纸张采为胶版纸,全书共有210页字数万 字,值得推荐的Python Book。

此书内容摘要

本书作者BrettSlatkin以使用场景为主导的精练教学方式,汇聚了59条优秀的实践原则、开发技巧和便捷方案,并以实用的代码范例来解释它们。作者根据自己在Google公司多年开发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实现了针对该协议的系统。他拥有哥伦比亚大学计算机工程专业学士学位。????

???


编辑们的推荐

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


Effective Python:编写高质量Python代码的59个有效方法图书的目录

本书赞誉
译者序
前言
致谢
第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条:尽量用异常来表示特殊情况,而不要返回暂无. 28
第15条:了解如何在闭包里使用外围作用域中的变量 30
第16条:考虑用生成器来改写直接返回列表的函数 35
第17条:在参数上面迭代时,要多加小心 37
第18条:用数量可变的位置参数减少视觉杂讯 41
第19条:用关键字参数来表达可选的行为 43
第20条:用暂无.和文档字符串来描述具有动态默认值的参数 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

部分内容试读

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/)下载。书中的错误也会张贴到该网站。
致谢?Acknowledgements在生活中,有很多人给了我指导、支持及鼓励,没有他们,本书就不会面世。
感谢《Effective Software Development》系列的顾问Scott Meyers。笔者15岁那年初次阅读了Scott所写的《Effective C++》,当时我就迷上了这门语言。我后来的教育经历,以及在Google的第一份工作,无疑都得益于Scott的那本书。这次有机会写作本书,本人深感荣幸。
感谢核心技术评审者Brett Cannon、Tavis Rudd和Mike Taylor,他们为本书提供了深刻而透彻的反馈意见。感谢Leah Culver和Adrian Holovaty,他们两位认为写作这样一本书很有意义。感谢友人Michael Levine、Marzia Niccolai、Ade Oshineye和Katrina Sostek,他们耐心阅读了本书的初稿。也感谢Google诸位同事审读本书。若没有以上诸君的帮助,本书读起来可能就会比较费解。
感谢制作本书的每一位工作人员。感谢编辑Trina MacDonald启动本书制作流程,并提供大力支持。感谢诸位团队成员帮助制作本书,他们是:策划编辑Tom Cirtin和Chris Zahn、助理编辑Olivia Basegio、营销经理Stephane Nakib、文字编辑Stephanie Geels,以及生产编辑Julie Nahil。
感谢与我共事的诸位优秀Python程序员:Anthony Baxter、Brett Cannon、Wesley Chun、Jeremy Hylton、Alex Martelli、Neal Norwitz、Guido van Rossum、Andy Smith、Greg Stein和Ka-Ping Yee。很高兴你们能督促并指引我学习Python。Python开发社团构建得非常优秀,成为一名Python开发者,令我感到特别荣幸。
感谢诸位同事这些年来对我的关照。感谢Kevin Gibbs帮助我应对风险。感谢Ken Ashcraft、Ryan Barrett和Jon McAlister教会我如何工作。感谢Brad Fitzpatrick帮助我提升工作能力。感谢Paul McDonald陪我一起创建我们的搞怪项目。感谢Jeremy Ginsberg和Jack Hebert令其成为现实。
感谢激发我编程兴趣的诸位老师:Ben Chelf、Vince Hugo、Russ Lewin、Jon Stemmle、Derek Thomson和Daniel Wang。正因为有了你们的指引,我才会努力磨练编程技术,进而使自己有能力去教导他人。
感谢母亲使我找到了人生的目标并鼓励我做程序员。感谢兄弟、祖父母、众亲戚以及儿时的玩伴,从小你们就是我的榜样,也使我找到了成长的快乐。
最后要感谢我的妻子Colleen,感谢她的关爱和支持,感谢她带来的欢笑。


关于此书评价

?

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

?

“当初我刚从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的软件工程师

??????

书摘内容

暂无.

Effective Python:编写高质量Python代码的59个有效方法最新最全的试读、书评、目录、简介信息由Python中文网整理提供。