本书的结构

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

在介绍让你自己实现某些功能的方法之前,我通常会先把现成可用的工具讲清楚。比如说第二部分的第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-order 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)这些高级的概念。

流畅的python不适合初学者_年度最值得关注Python进阶书——《流畅的Python》相关推荐

  1. linux入门 适合初学者_【推荐】适合初学者临摹的国画|国画基础入门教学视频教程!...

    原标题:[推荐]适合初学者临摹的国画|国画基础入门教学视频教程! 适合初学者临摹的国画|国画基础入门教学视频教程!适合初学者临摹的国画|国画基础入门教学视频教程! 关注公众号:每日学绘画,回复关键词[ ...

  2. linux入门 适合初学者_听说 C++ Primer-不适合初学者入门!元芳,你怎么看呢?

    前言 一本合适的入门书能让你学习的时候信心倍增,如饥似渴,而一本不合适的入门书让你望而却步,怀疑人生. 它很优秀 C++相对于其他语言来说,是一门较为复杂的语言,传言一年精通,三年熟悉,五年了解,十年 ...

  3. python dict批量选择_这一定是你见过最全面的python重点

    由于总结了太多的东西,所以篇幅有点长,这也是我"缝缝补补"总结了好久的东西. Py2 VS Py3 print成为了函数,python2是关键字 不再有unicode对象,默认st ...

  4. python埃及分数_送你一份低折扣书单,Python就占了6本,人工智能2本

    小编没什么好礼物送给大家的,这里有几本超低折扣的几本书,分享给你,为您省点小钱,不谢哟!此书单中,Python书有6本,少儿编程书4本,人工智能书2本.哪一本是你的菜,自己选吧! 文中这几本书折扣价在 ...

  5. 调用python接口并画图_【PySpark源码解析】教你用Python调用高效Scala接口

    点击 机器学习算法与Python学习 ,选择加星标 精彩内容不迷路 机器之心专栏 作者:汇量科技-陈绪 众所周知,Spark 框架主要是由 Scala 语言实现,同时也包含少量 Java 代码.Spa ...

  6. 运维学python用不上_数读 | 为什么运维朋友们都需要学Python?

    运维人员需不需要学开发?需不需要学Python?PythonN和Shell有什么区别?天天问这种好水的问题,我实在受不了,决定帮大家扫扫盲. 现阶段,掌握一门开发语言已经成为高级运维工程师的必备计能, ...

  7. python嵌入式系统开发_图解嵌入式系统开发之语言篇:初识Python

    一直忙于工作,似乎忘记了抽时间学习新知识,最近难得空闲,花了两天时间看了一下Python语法.作为工作中经常使用C/C++的人,学习Python的过程中最大的感受就是"似曾相识". ...

  8. 青少年编程python一级真题_青少年编程能力等级测评试卷二及答案 Python编程(一级)...

    青少年编程能力等级测评试卷 Python编程(一级) (考试时间90分钟,满分100分) 一.单项选择题(共20题,每题2.5分,共50分) 1. 运行下方代码段,输出是6,则输入的可能是( C ). ...

  9. python调用vb文件_【转载】利用VB生成APDL文件 和Python文件的方法

    转载 利用VB生成APDL文件 和Python文件的方法 作者:李涛 欢迎关注:CAE技术分享 专注于CAE技术的分享和讨论. 1. 概述 Visual Basic作为一种可视化程序设计语言,应用相对 ...

  10. python编写ai电话_开发人工智能电话机器人必须掌握的语言,Python

    那么要想学人工智能,想学Python,那以下这些是必不可少的: 首先,你要学Python如何爬取数据,你要做数据分析.数据建模,起码你要有数据,这些数据来源有多种方法,但是很多都来自网络,这就是爬虫. ...

最新文章

  1. mysql excel 命令行_MySQL 命令行数据导出到 Excel
  2. 阳泉师范高等专科学校计算机系,阳泉师范高等专科学校
  3. 我的Java自定义线程池执行器
  4. 洛谷 P2389 电脑班的裁员 解题报告
  5. CompletableFuture详解~getNow
  6. ECCV 2020 论文大盘点-光流篇
  7. 程序员需知的 58 个网站!个个经典
  8. android 5.01,爱思加强版
  9. 学习一下企业管理信息化建设的“诺兰模型”
  10. Epicor 完成和关闭工单
  11. Cisco 3850 Mgmt VRF Configuration
  12. 【2018提高测试】飘雪圣域 【连通性+可持久化线段树 / 离线+权值线段树】 (详解)
  13. Zotero取消英文语法检查
  14. 如何提高用户粘性,增强活跃度?
  15. 【案例】某市规范性文件合法性审核信息管理系统和行政执法监督平台建设案例
  16. 点赋科技:本地生活,如何开启复苏之路
  17. xlsx导出以excel文件导出数据
  18. 筑基九层 —— 指针详解
  19. 小学计算机老师毕业留言,高三老师给学生的毕业留言
  20. 网飞文化-真正价值之沟通篇

热门文章

  1. Swift 使用SwiftyJSON解析JSON数据
  2. 三菱FX3S,FX3G,FX3U序列PLC控制器编程手册-基本应用指令篇下载
  3. 用友nc java启动不了_用友NC开发本地启动客户端时界面空白问题的解决
  4. Java之路:你真的了解final吗?
  5. 记一次SQLServer2019安装和卸载问题的解决过程
  6. WEB专用服务器的安全设置
  7. leetcode36.有效的数独(中等)
  8. 动态时钟html代码_超炫酷的时钟软件推荐
  9. Lantek钣金软件的介绍与安装
  10. SQL慢查询日志与查询分析器explain