内容简介
本书并不提供基础知识的重复训练,而是为已有Python基础的开发者提供认知升维的跳板。通过掌握这些关键原理,开发者将获得举一反三的思维能力,在复杂项目开发中快速构建高效、优雅且可扩展的解决方案,真正实现从熟练到精通的质变跃迁。本书创新性地聚焦Python语言的本质规律,通过“二八定律”提炼出5%的核心知识,构建起高效学习的黄金路径。通过阅读本书,读者将系统掌握:如何利用高阶函数抽象编写强大的代码;如何使用生成器设计模式让Python代码更加健壮且具备可扩展性;理解Python推导式,明白如何构建更复杂的推导式结构,以及推导式与生成器的关联;利用装饰器进行元编程,实现强大的抽象,高效复用代码;利用Python异常处理机制高效进行错误调试;Python面向对象模型中的高级面向对象编程技术;如何借助测试驱动开发更快、更好地编写代码,进入编程“心流”状态;高效组织模块、基础和高级Python日志,以及更多内容。
目录
目录
前言1
第1章 使用生成器进行扩展9
1.1 Python中的迭代9
1.2 生成器函数13
1.2.1 继续执行next()14
1.2.2 转换为生成器函数16
1.2.3 生成器的必要性17
1.3 生成器模式和可扩展组合性18
1.3.1 文本行转字典20
1.3.2可组合接口21
1.3.3 扇出22
1.3.4 扇入23
1.4 Python中的迭代器26
1.5 迭代器协议27
1.6 小结32
第2章 使用推导式创建集合33
2.1 列表推导式34
2.2 格式化以提高可读性(及更多)36
2.3 多数据源和过滤器37
2.3.1 独立语句39
2.3.2 多过滤器40
2.4 推导式与生成器42
2.5 字典、集合和元组45
2.6 小结48
第3章 高级函数49
3.1 接收和传递可变参数49
3.1.1 参数拆包51
3.1.2 可变关键字参数52
3.1.3 关键字拆包54
3.1.4 结合位置参数与关键字参数55
3.2 函数即对象56
3.3 Python的键函数60
3.4 小结62
第4章 装饰器63
4.1 基本的装饰器64
4.1.1 通用装饰器66
4.1.2 装饰方法67
4.2 装饰器中的数据69
4.2.1 访问内部数据73
4.2.2 非局部装饰器状态74
4.3 接收参数的装饰器77
4.4 类装饰器80
4.4.1 实现类装饰器81
4.4.2 类装饰器的优势82
4.5 应用于类的装饰器84
4.6 小结87
第5章 异常和错误88
5.1 基本概念88
5.1.1 处理异常89
5.1.2 使用异常控制代码流91
5.1.3 finally代码块92
5.1.4 字典异常94
5.2 异常即对象95
5.3 抛出异常97
5.4 捕获并重新抛出异常100
5.5 棘手的Python反模式102
5.6 小结106
第6章 类和对象:进阶107
6.1 特性107
6.1.1 特性模式110
6.1.2 验证111
6.1.3 属性与重构112
6.2 工厂模式115
6.2.1 替代构造函数:简单工厂模式115
6.2.2 动态类型:工厂方法模式118
6.3 观察者模式121
6.3.1 简易观察者122
6.3.2 利用Python优化观察者模式124
6.3.3 多频道128
6.4 魔术方法130
6.5 魔术方法进阶135
6.6 小结138
第7章 自动化测试139
7.1 测试驱动开发140
7.2 单元测试和简单断言141
7.3 固定和通用测试设置146
7.4 断言异常148
7.5 使用子测试149
7.6 小结153
第8章 模块管理155
8.1 创建模块155
8.2 创建独立的库160
8.3 多文件模块162
8.4 导入语法和版本控制165
8.5 嵌套子模块结构167
8.6 反模式警告170
8.7 导入的副作用173
8.8 小结176
第9章 Python日志177
9.1 基本接口177
9.1.1 日志级别178
9.1.2 日志级别的作用180
9.2 配置基本接口180
9.3 传递参数183
9.4 日志记录器185
9.5 日志目的地:处理器和流186
9.6 向多个目的地记录日志189
9.7 记录布局与格式化191
9.8 小结192
后记193
前言/序言
前言
Python 已成为现代计算领域的通用语言。本书的核心观点是,Python 是目前最 重要的编程语言,掌握 Python 可带来巨大的收益。本书旨在传授 Python 相关技术、模式和工具,让你的 Python 编程技能实现质的飞跃。 如果你接触过 Python,本书将极大地提升你的编程能力和效率,同时还能大幅压缩调试代码的时间。
目标读者
如果你具有 Python 基础,并且掌握了编程入门内容,本书正是为你量身而写的。本书也适合想要学习更高级技术和方法的读者阅读,让你用 Python 实现更多目标。 本书不适合浅尝辄止的 Python 学习者。Python 很重要,掌握 Python 回报巨大。本书也不适合没有抱负的人。在撰写本书时,笔者希望读者能打造一份令自己自豪的职业,从事具有积极影响力的工作。 此外,本书不适合思维僵化的人。优秀工程师和“普通”程序员的区别在于, 前者具有判断清晰、思维新颖、洞察细微的特点。
学习的两个层面
学无止境。读者真正想要的是培养新能力,因此本书包括两个学习层面。 首先是信息层面。信息层面包括阅读内容或者聆听后记住。将事实、观点和其他信息存入脑海,以便日后回忆、复述给其他人,或用于逻辑推理。信息很重要,是学习的基础。其次是更深层面的学习,即能力层面。当编写代码时,可以实现以前达不到的需求。 这两个层面都很重要,但能力才是真正的关键所在。信息可能具有欺骗性。你感觉自己理解了知识,但在真正实践时,却常常盯着空白的编辑器无从下手。 你肯定有过类似的经历,每个程序员都不例外。 其实,你只是在信息层面进行了学习,尚未达到能力层面。当你真正达到能力层面时,你所需要的信息会自然而然地在脑海中涌现,就像思考本身一样自然。大多数情况下,读书或看视频只能在信息层面传授知识。但本书旨在通过多种方式改变这种情况。
本书编写方式
有两个存在已久的问题。 问题 1:要学的东西太多。 问题 2:由于技术和文化飞速变革,社会发展导致人们用于专注学习的时间和精力大幅减少。 这两个问题极有可能是人们痛苦的根源。但有一条出路,即所谓的第一性原理。在人类活动的任何领域,包括 Python 编程,都存在基本概念,概念是一切的基础。概念涉及重要的差异、抽象概念和思维模型。当你掌握了第一性原理,就会发现自己能穿透繁杂信息,更轻松地开展工作。第一性原理就像加速器,为人们提供了解决诸多问题的工具、资源和能力。实际上,这符合“95/5”法则,你只需专注学习其中 5% 的知识,其余知识的学习 就像多米诺骨牌一样,迎刃而解。 这 5% 的知识就是我们所说的 Python 第一性原理,也是本书的核心所在。 因此,本书在内容上会有所取舍,并非关于 Python 知识的一站式全面指南。此外,本书基于实际开发经验(来自工程师团队的项目实践),对实践经验进行了总结。代码可维护性、稳健性和可读性比其他任何方面都重要。在利用强大的抽象概 念与开发团队成员都易于理解的代码之间,本书进行了权衡。在整本书中,笔者非常关注软件开发中的认知层面。为了编写出让所有人都能轻松、快速且准确理解的代码,变量和函数命名是关键的一环。但命名远不止于语法层面,还涉及使用哪些语言特性和库资源,以及不使用哪些。 本书有意控制了篇幅,毕竟要学习的内容已经很多了。本书聚焦于最有价值的内容,目标是让读者受益多年。 可调用对象的约定 本书采用了一种可能会引起争议的写作约定。当在表述中提及标识符名 称时,笔者使用等宽字体。所以变量“x”会写成 x,类“Point”会写成 Point,等等。 争议之处在于,当提及函数或方法时,笔者会在标识符名称后附加一对括 号。所以函数“compute”会写成 compute(),而非 compute。即使调用该函数时必须传入参数,也会这样写。“()”本质上是一种注释,表明该标识符是可调用的。以笔者教授和撰写高级Python内容的经验来看,这样有助于理解,所以本书始终遵循这一约定。
本书未涉及的内容
以下是本书省略的主题:
? 标准库之外的内容。仅仅是 Python 及其内置功能,就包含足够的深度。
? 类型注释。本书付梓之时,类型注释仍未完全敲定。尽管类型注释对部分人很重要,但使用尚不普遍。
? 数据类。关于数据类的教程数不胜数,第 6 章已经是本书篇幅最长的章。
? 并发编程。大多数 Python 程序都是单线程的。要全面讲解线程、多进程和异步,本书篇幅可能翻倍。
? 任何依赖特定 Python 版本的内容。不过,最佳的 Python 模式和策略往往不受版本影响。本书专注的正是编程设计模式和策略。
? 不常用的特性,如仅关键字参数、仅位置参数、条件(三元)表达式、模式匹配等。这些特性虽然有用,但更适合其他图书。
? 人们喜欢的其他主题(肯定会有这种情况)。 本书所涵盖的内容涉及 Python 的关键知识点,其中许多并非新内容,却被严重低估和误解,但实际上这些内容对所有 Python 开发者都极具价值。
如果读者最喜欢的 Python