返回介绍

本书的结构

发布于 2024-02-05 21:59:48 字数 2358 浏览 0 评论 0 收藏 0

如果你是本书的目标读者,那你应该可以从本书的任意一章开始阅读,但是如果按照我写作时的构思来的话,本书一共分为六个独立的部分,每个部分内的章节最好按照顺序来读。

在介绍让你自己实现某些功能的方法之前,我通常会先把现成可用的工具讲清楚。比如说第二部分的第 2 章涉及现成的序列类型(sequence type),包括 collections.deque 这种不太受关注的序列类型。一直到第四部分,我们才会看看如何从抽象基类(abstract base class, ABC)中获利,抽象基类则被封装在 collections.abc 这个包里。如果想创建自己的 ABC,你可能得看到第四部分的最后一些内容才行,因为我一直觉得,如果没有熟练使用 ABC 的经验,贸然去实现一套自己的东西是不合适的。

这样做有几个好处。第一,知道有什么现成的工具可用,能避免重新发明轮子。毕竟我们使用现有集合类型(collection type)的概率要远大于自己动手写一套新的。第二,这样一来,在讨论如何写新类型之前,我们能够有更多的机会来了解这些现成类的高级用法。第三,比起从零开始构建一个 ABC,继承已有的 ABC 库应该会简单一些。最后,我认为在看过一些实际的案例之后,理解抽象会更轻松。

当然,这样也会带来一些不便之处,比如书里的向前引用就会分散在各个不同的章节里面。但是经过上述这番梳理,我想这一点不便之处也是可以容忍的。

下面是本书每一部分的主题。

第一部分

第一部分只有单独的一章,讲解的是 Python 的数据模型(data model),以及如何为了保证行为一致性而使用特殊方法(比如 __repr__),毕竟 Python 的一致性是出了名的。其实整本书几乎都是在讲解 Python 的数据模型,第 1 章算是一个概览。

第二部分

第二部分包含了各种集合类型:序列(sequence)、映射(mapping)和集合(set),另外还提及了字符串(str)和字节序列(bytes)的区分。说起来,最后这一点也是让亲者(Python 3 用户)快,仇者(Python 2 用户)痛的一个关键,因为这个区分致使 Python 2 代码迁移到 Python 3 的难度陡增。第二部分的目标是帮助读者回忆起 Python 内置的类库,顺带解释这些类库的一些不太直观的地方。具体的例子有 Python 3 如何在我们观察不到的地方对 dict 的键重新排序,或者是排序有区域(locale)依赖的字符串时的注意事项。为了达到本部分的目标,有些地方的讲解会比较大而全,像序列类型和映射类型的变种就是这样;有时则会写得很深入,比方说我会对 dict 和 set 底层的散列表进行深层次的讨论。

第三部分

如何把函数作为一等对象(first-class object)来使用。第三部分首先会解释前面这句话是什么意思,然后话题延伸到这个概念对那些被广泛使用的设计模型的影响,最后读者会看到如何利用闭包(closure)的概念来实现函数装饰器(function decorator)。这一部分的话题还包括 Python 的这些基本概念:可调用(callable)、函数属性(function attribute)、内省(introspection)、参数注解(parameter annotation)和 Python 3 里新出现的 nonlocal 声明。

第四部分

到了这里,书的重点转移到了类的构建上面。虽然在第二部分里的例子里就有类声明(class declaration)的出现,但是第四部分会呈现更多的类。和任何面向对象语言一样,Python 还有些自己的特性,这些特性可能并不会出现在你我学习基于类的编程的语言中。这一部分的章节解释了引用(reference)的原理、“可变性”的概念、实例的生命周期、如何构建自定义的集合类型和 ABC、多重继承该怎么理顺、什么时候应该使用操作符重载及其方法。

第五部分

Python 中有些结构和库不再满足于诸如条件判断、循环和子程序(subroutine)之类的顺序控制流程,第五部分的笔墨会集中在这些构造和库上。我们会从生成器(generator)起步,然后话题会转移到上下文管理器(context manager)和协程(coroutine),其中会涵盖新增的功能强大但又不容易理解的 yield from 语法。这一部分以并发性和面向事件的 I/O 来结尾,其中跟并发性相关的是 collections.futures 这个很新的包,它借助 futures 包把线程和进程的概念给封装了起来;而跟面向事件 I/O 相关的则是 asyncio,它的背后是基于协程和 yield from 的 futures 包。

第六部分

第六部分的开头会讲到如何动态创建带属性的类,用以处理诸如 JSON 这类半结构化的数据。然后会从大家已经熟悉的特性(property)机制入手,用描述符从底层来解释 Python 对象属性的存取。同时,函数、方法和描述符的关系也会被梳理一遍。第六部分会从头至尾地实现一个字段验证器,在这个过程中我们会遇到一些微妙的问题,然后在最后一章中就自然引出像类装饰器(class decorator)和元类(metaclass)这些高级的概念。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文