用Python编写程序,是相当容易的,所以这门语言非常流行。但若想掌握Python所特有的优势、魅力和表达能力,则相当困难,而且语言中还有很多隐藏的陷阱,容易令开发者犯错。
本书可以帮你掌握真正的Pythonic编程方式,令你能够完全发挥出Python语言的强大功能,并写出健壮而高效的代码。Scott Meyers在畅销书《Effective C++》中开创了一种以使用场景为主导的精练教学方式,本书作者Brett Slatkin就以这种方式汇聚了59条优秀的实践原则、开发技巧和便捷方案,并以实用的代码范例来解释它们。
Slatkin根据自己在Google公司多年开发Python基础架构所积累的经验,揭示Python语言中一些鲜为人知的微妙特性,并给出了能够改善代码功能及运行效率的习惯用法。通过本书,你能够了解到解决关键编程任务所用的最佳方式,并学会编写易于理解、便于维护且利于改进的代码。
本书核心内容包括:
涵盖Python 3.x及Python 2.x主要应用领域的实用指南,以及与之配套的详细解释及代码范例。
与函数相关的编程建议,这些建议有助于我们写出意图清晰、便于复用且缺陷较少的函数。
如何准确地表达类与对象的行为。
在使用元类和动态属性时,如何避免错误的用法。
更为高效的并发及并行方式。
与Python内置模块相关的编程技巧和习惯用法。
多人协作时所用的开发工具和最佳实践方式。
旨在改善代码质量和程序性能的调试、测试与优化方案。
本书赞誉
译者序
前言
致谢
第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和filter 15
第8条:不要使用含有两个以上表达式的列表推导 16
第9条:用生成器表达式来改写数据量较大的列表推导 18
第10条:尽量用enumerate取代range 20
第11条:用zip函数同时遍历两个迭代器 21
第12条:不要在for和while循环后面写else块 23
第13条:合理利用try/except/else/finally结构中的每个代码块 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/finally代码 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
版式设计的原理已经存在了几个世纪,除平面设计外,建筑设计、时装设计等很多领域都广泛地运用这些原理。本书通过挖掘日常生活中
本书根据最新的2.6.24内核为基础。在讲述方式上,本书注重实例分析,尽量在讨论“如何做”的基础上,深入讨论为什么要这么做,从
《儿童心理问题全攻略(家庭教育)》内容简介:每一个孩子的内心都是一个充满奥秘的世界。如何走进孩子的内心? 如何了解孩子莫名举
《轻松看懂体检报告(第二版)》内容简介:本书分为三篇,首篇向广大读者介绍健康体检的常规和基础知识。第二篇针对成人体检,按照
《并发模式与应用实践》内容简介:本书解释了如何利用并行体系结构的不同特性,使代码更快、更高效。首先介绍基本的并发概念,并探
叶夫根尼·莫罗佐夫(EvgenyMorozov),科技互联网批评家,《新共和》杂志编辑,《纽约时报》、《金融时报》、《华尔街日报》、《
移动环境下高校图书馆用户情景敏感服务模式及平台开发 本书特色 管理科学与工程、情报学、信息管理、图书馆学以及教育管理等专业的高校师生,相关研究人员和科研管理者移...
如果你希望通过并发编程来充分发挥多核处理器的强大功能,那么本书将为你提供所需的理论知识和实际经验。《并发的艺术》是为数不
《知识图谱与认知智能:基本原理、关键技术、应用场景与解决方案》内容简介:读者通过本书可以了解企业认知智能的原理、应用方法、
写在前面|王受之:其实,我这辈子都在讲设计的故事,只不过以前老在讲台上讲,很少通过书的方式和大家讲。现在就想和大家通过这本
本书系统地介绍了近年来国内外人机界面的最新发展与成果,全书共分6部分,14章。第1部分为概述,介绍了人机界面的定义、起源、发
《Hadoop技术内幕》内容简介:本书由腾讯数据平台的资深Hadoop专家、X-RIME的作者亲自执笔,对Common和HDFS的源代码进行了分析,旨
高级MPLS设计与实施 本书特色 通过对MPLS体系结构与操作的详细分析,加深对MPLS技术的理解;运用LSR设计并实现基于数据包的MPLS虚拟专用网;运用WA...
《美丽的青春》内容简介:本书收集了抒情诗人黑塞的中短篇小说中最脍炙人口的五篇名作。《秋之旅》描写一个在流浪和怀念之间徘徊的
关于算法分析的这多卷论著已经长期被公认为经典计算机科学的定义性描述。迄今已出版的完整的三卷组成了程序设计理论和实践的惟一
佳肴总是让人食指大动,一个好的餐厅视觉形象则能充分表现烹饪哲学,让品牌印象深入人心,同时令顾客乐不思归。设计师精心打造的
在过去单核CPU时代,单任务在一个时间点只能执行单一程序,随着多核CPU的发展,并行程序开发就显得尤为重要。《实战Java高并发程
《信息场的开拓:未来后信息社会交互设计》针对当前世界范围内有关交互设计和信息设计的各种疑问,通过对于信息、信息设汁以及与当
由塞贝尔编著的《实用CommonLisp编程》是一本不同寻常的CommonLisp入门书。《实用CommonLisp编程》首先从作者的学习经过及语言历
《凝固的美:东西方雕塑艺术比较》内容简介:《凝固的美:东西方雕塑艺术比较》以优美洗练的文字,分十八个主题对中西方经典雕塑进