开场白

目录

这本书适合谁

本书,是写给那些,立志把Python玩得得心应手的同学! 阅读本书前,你得先知道Python的基本语法,起码过了一遍Learn Python the hard way

如果你之前用Python2,但是想迁移到Python3.4或以上,那是极好的,写这本书的时候,大部分的Python工程师还在用Python2,所以讲到Python3语言特性的时候,我会着重强调的。

然而,本书想要最大限度的展现Python3的魅力,所以不会刻意去兼容Python2。

虽说没有刻意兼容,本书的大部分例子也可以运行在Python2.7下,个别情况也只需要稍作修改。

即使你坚持使用Python2.7,我相信这本书也会对你产生积极的影响,因为核心概念还是一样的,毕竟Python3不是一门新语言,而且一些不一样的地方,我相信聪明的你,在一个安静的午后,就能学会。What’s New in Python 3.0 可以作为一个很好的起点。虽然Python3.0是2009年发布的,后续也有很多变化,但是最重要的还是在3.0。

如果你不太确定自己能不能跟着本书走下来,去把官方Python Tutorial再过一遍,官方文档里已经有的,不会在本书里细讲,除非是Python3的特性。

这本书不适合谁

如果你刚开始学Python,基本语法还没过完,那这本书对你来说,会有点难啃。

而且太早读这本书,会让你觉得,所有的Python脚本都应该使用魔法方法或者元编程的知识。过早抽象和过早优化一样有害。

本书的组成结构

本书的核心受众可以在各章节之间跳着看。 本书由六部分组成,我觉得阅读每部分里的小节时,按顺序读会更好。

我试着强调这样一个观点,那就是,先用好那些可以用的东西,再讨论如何实现自己的。

比如,在第二章里,涵盖了那些开箱即用的sequence types(序列类型),包括了一些相对来说不太引人注意的序列类型,像collections.deque。实现用户自定义的序列,要等到第四部分才会提到,在第四部分我们还会看到如何使用collection.abc里的抽象基类,在第四部分的后半部分会讨论如何实现你自己的抽象基类。

这样安排是有好处的,先熟练使用那些开箱即用的,可以避免重复造轮子,会给你节省大量时间。我们也更喜欢从已有的ABCs中去继承,而不是从头创建一个新的ABC。熟练使用已有的,会让你更容易理解内部机理。

Part I

先用一章来说说Python的数据模型,解释魔法方法为什么是Python对象保持行为一致性的关键。理解Python 数据模型的方方面面,是本书的一大主题,第一章先了解一下概貌。

Part II

第二部分里的章节,主要cover一些collection types的用法,sequences,mappings,sets,还有str 和 bytes(Python3用户的福音,Python2用户的痛点),主要目标是我们一起回忆一下哪些是已经可用的,顺便解释一下可能让你吃惊的地方。

Part III

这里我们讨论Python里的“一级公民” 函数,什么叫first-class?它怎么影响到一些流行的设计模式,怎么利用闭包实现函数装饰器。还会包括Python中的可调用的概念,函数attributes(属性),introspection(自省),parameter annotations(参数注解),以及Python3中的nonlocal声明。

Part IV

这部分的重点聚焦到类,Python有它自己的面向对象的特性集合,这部分的章节会解释:

  1. references(引用)是如何工作的
  2. mutability(可变性)到底意味着什么
  3. 实例的生命周期
  4. 如何建造你自己的collections(集合),ABCs(抽象基类)
  5. 怎么玩多继承
  6. 当需要的时候,怎么实现运算符重载

Part V

这部分会讲Python中的流程控制,从生成器开始,随后是上下文管理器,协程,包括让人迷惑但又很强大的yield from 语法。

第五部分的末尾,会用collections.futures介绍Python中的并发,用asyncio(基于协程和yield from的特性)玩玩异步I/O。

Part VI

这部分首先回顾了类的创建,用属性动态创建一个类,来处理半结构化的json数据集。

然后在深入Python的属性访问之前,我们cover了Python中的property机制。函数,方法,descriptor(描述符)也在这里解释。

第六部分里,我们通过逐步实现一个field validation library 来揭开class decorator(类装饰器)和metaclass(元类)的面纱。

Soapbox

我(原作者Luciano Ramalho )从1998年就开始使用Python,并用Python教学,我喜欢学习不同的编程语言,并比较它们的设计,以及它们背后的理论。在一些章节的结尾,我添加了“临时演讲台”,用来发表一些我个人的观点,关于Python和其他语言。如果你不好奇,你可以跳过这些章节~

Python Jargon

我希望这本书不只讲Python语言本身,还要包括Python背后的文化。(忽然想起一句话,学习语言,就是学习语言背后的文化!)经过20多年的发展,Python社区里的人们在交流时,已经形成了自己的方言和缩写。在本书结尾会有这些方言的详细解释。

Python Version Covered

我在Python3.4(CPython3.4)环境下测试了本书的所有代码。

本书几乎所有的代码应该在Python3.x下都可以顺利运行。需注意yield from,asyncio,只能用在Python3.3之后的版本。

大部分代码只需稍作修改就能运行在Python2.7下,除了第四章跟Unicode相关的例子。本书在Github上的源码,用的时候请尽量带上原作者的信息。

功能链接

留言

comments powered by Disqus