展开全部

主编推荐语

"90条建议带你掌握Python, 包括编程原则、技巧、便捷方案、内置类型、函数、并发等"

内容简介

本书能够帮你掌握真正的Pythonic编程方式,充分发挥Python的优势,写出健壮而高效的代码。ScottMeyers在其名著EffectiveC中开创了一种用简明的场景实例来讲述编程经验的方式,本书作者BrettSlatkin也沿用这种方式,向大家讲解Python的编程原则、开发技巧与便捷方案,形成90条建议并配有实用的范例代码,以便大家能够扎实地掌握Python语言。本书的关键内容包括:●31条新的实用建议,这些建议涵盖Python开发的几个主要方面。●对各种语句、表达式与内置类型做了详细讲解与演示。●怎样写出意图清晰、便于复用而且不容易出现bug的函数。●怎样更好地使用推导机制与生成器函数。●怎样用类与接口准确展示相关的行为。●怎样避开元类与动态属性中的一些陷阱。●怎样用更高效且更清晰的方法写出并发与并行程序。●怎样优化程序性能并提升代码质量。●用于改进调试与测试工作的技术与内置模块。●与协作开发有关的工具和经验。

目录

  • 版权信息
  • 本书赞誉
  • 译者序
  • 前言
  • 致谢
  • 第1章培养Pythonic思维
  • 第1条 查询自己使用的Python版本
  • 第2条 遵循PEP 8风格指南
  • 第3条 了解bytes与str的区别
  • 第4条 用支持插值的f-string取代C风格的格式字符串与str.format方法
  • 第5条 用辅助函数取代复杂的表达式
  • 第6条 把数据结构直接拆分到多个变量里,不要专门通过下标访问
  • 第7条 尽量用enumerate取代range
  • 第8条 用zip函数同时遍历两个迭代器
  • 第9条 不要在for与while循环后面写else块
  • 第10条 用赋值表达式减少重复代码
  • 第2章列表与字典
  • 第11条 学会对序列做切片
  • 第12条 不要在切片里同时指定起止下标与步进
  • 第13条 通过带星号的unpacking操作来捕获多个元素,不要用切片
  • 第14条 用sort方法的key参数来表示复杂的排序逻辑
  • 第15条 不要过分依赖给字典添加条目时所用的顺序
  • 第16条 用get处理键不在字典中的情况,不要使用in与KeyError
  • 第17条 用defaultdict处理内部状态中缺失的元素,而不要用setdefault
  • 第18条 学会利用__missing__构造依赖键的默认值
  • 第3章函数
  • 第19条 不要把函数返回的多个数值拆分到三个以上的变量中
  • 第20条 遇到意外状况时应该抛出异常,不要返回None
  • 第21条 了解如何在闭包里面使用外围作用域中的变量
  • 第22条 用数量可变的位置参数给函数设计清晰的参数列表
  • 第23条 用关键字参数来表示可选的行为
  • 第24条 用None和docstring来描述默认值会变的参数
  • 第25条 用只能以关键字指定和只能按位置传入的参数来设计清晰的参数列表
  • 第26条 用functools.wraps定义函数修饰器
  • 第4章推导与生成
  • 第27条 用列表推导取代map与filter
  • 第28条 控制推导逻辑的子表达式不要超过两个
  • 第29条 用赋值表达式消除推导中的重复代码
  • 第30条 不要让函数直接返回列表,应该让它逐个生成列表里的值
  • 第31条 谨慎地迭代函数所收到的参数
  • 第32条 考虑用生成器表达式改写数据量较大的列表推导
  • 第33条 通过yield from把多个生成器连起来用
  • 第34条 不要用send给生成器注入数据
  • 第35条 不要通过throw变换生成器的状态
  • 第36条 考虑用itertools拼装迭代器与生成器
  • 第5章类与接口
  • 第37条 用组合起来的类来实现多层结构,不要用嵌套的内置类型
  • 第38条 让简单的接口接受函数,而不是类的实例
  • 第39条 通过@classmethod多态来构造同一体系中的各类对象
  • 第40条 通过super初始化超类
  • 第41条 考虑用mix-in类来表示可组合的功能
  • 第42条 优先考虑用public属性表示应受保护的数据,不要用private属性表示
  • 第43条 自定义的容器类型应该从collections.abc继承
  • 第6章元类与属性
  • 第44条 用纯属性与修饰器取代旧式的setter与getter方法
  • 第45条 考虑用@property实现新的属性访问逻辑,不要急着重构原有的代码
  • 第46条 用描述符来改写需要复用的@property方法
  • 第47条 针对惰性属性使用__getattr__、__getattribute__及__setattr__
  • 第48条 用__init_subclass__验证子类写得是否正确
  • 第49条 用__init_subclass__记录现有的子类
  • 第50条 用__set_name__给类属性加注解
  • 第51条 优先考虑通过类修饰器来提供可组合的扩充功能,不要使用元类
  • 第7章并发与并行
  • 第52条 用subprocess管理子进程
  • 第53条 可以用线程执行阻塞式I/O,但不要用它做并行计算
  • 第54条 利用Lock防止多个线程争用同一份数据
  • 第55条 用Queue来协调各线程之间的工作进度
  • 第56条 学会判断什么场合必须做并发
  • 第57条 不要在每次fan-out时都新建一批Thread实例
  • 第58条 学会正确地重构代码,以便用Queue做并发
  • 第59条 如果必须用线程做并发,那就考虑通过ThreadPoolExecutor实现
  • 第60条 用协程实现高并发的I/O
  • 第61条 学会用asyncio改写那些通过线程实现的I/O
  • 第62条 结合线程与协程,将代码顺利迁移到asyncio
  • 第63条 让asyncio的事件循环保持畅通,以便进一步提升程序的响应能力
  • 第64条 考虑用concurrent.futures实现真正的并行计算
  • 第8章稳定与性能
  • 第65条 合理利用try/except/else/finally结构中的每个代码块
  • 第66条 考虑用contextlib和with语句来改写可复用的try/finally代码
  • 第67条 用datetime模块处理本地时间,不要用time模块
  • 第68条 用copyreg实现可靠的pickle操作
  • 第69条 在需要准确计算的场合,用decimal表示相应的数值
  • 第70条 先分析性能,然后再优化
  • 第71条 优先考虑用deque实现生产者-消费者队列
  • 第72条 考虑用bisect搜索已排序的序列
  • 第73条 学会使用heapq制作优先级队列
  • 第74条 考虑用memoryview与bytearray来实现无须拷贝的bytes操作
  • 第9章测试与调试
  • 第75条 通过repr字符串输出调试信息
  • 第76条 在TestCase子类里验证相关的行为
  • 第77条 把测试前、后的准备与清理逻辑写在setUp、tearDown、setUp-Module与tearDownModule中,以防用例之间互相干扰
  • 第78条 用Mock来模拟受测代码所依赖的复杂函数
  • 第79条 把受测代码所依赖的系统封装起来,以便于模拟和测试
  • 第80条 考虑用pdb做交互调试
  • 第81条 用tracemalloc来掌握内存的使用与泄漏情况
  • 第10章协作开发
  • 第82条 学会寻找由其他Python开发者所构建的模块
  • 第83条 用虚拟环境隔离项目,并重建依赖关系
  • 第84条 每一个函数、类与模块都要写docstring
  • 第85条 用包来安排模块,以提供稳固的API
  • 第86条 考虑用模块级别的代码配置不同的部署环境
  • 第87条 为自编的模块定义根异常,让调用者能够专门处理与此API有关的异常
  • 第88条 用适当的方式打破循环依赖关系
  • 第89条 重构时考虑通过warnings提醒开发者API已经发生变化
  • 第90条 考虑通过typing做静态分析,以消除bug
展开全部

评分及书评

4.8
5个评分

出版方

机械工业出版社

机械工业出版社是全国优秀出版社,自1952年成立以来,坚持为科技、为教育服务,以向行业、向学校提供优质、权威的精神产品为宗旨,以“服务社会和人民群众需求,传播社会主义先进文化”为己任,产业结构不断完善,已由传统的图书出版向着图书、期刊、电子出版物、音像制品、电子商务一体化延伸,现已发展为多领域、多学科的大型综合性出版社,涉及机械、电工电子、汽车、计算机、经济管理、建筑、ELT、科普以及教材、教辅等领域。