开场白
这本书适合谁
本书,是写给那些,立志把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有它自己的面向对象的特性集合,这部分的章节会解释:
- references(引用)是如何工作的
- mutability(可变性)到底意味着什么
- 实例的生命周期
- 如何建造你自己的collections(集合),ABCs(抽象基类)
- 怎么玩多继承
- 当需要的时候,怎么实现运算符重载
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上的源码,用的时候请尽量带上原作者的信息。