流畅的python.pdf_流畅的PythonPDF下载⾼清完整扫描原版书名:流畅的Python
作者:[巴西] Luciano Ramalho
译者:安道 吴珂
ISBN:978-7-115-45415-7
⽬标读者
本书的⽬标读者是那些正在使⽤ Python,⼜想熟悉 Python 3 的程序员。
如果你懂 Python 2,但是想迁移到 Python 3.4 或者更新的版本,也没问
题。在写这本书的时候,⼤多数专业 Python 程序员⽤的还是 Python 2,
因此如果书中出现来⾃ Python 3 的特性,读者可能会感到陌⽣,我也会
特别地做出解释。
然⽽,本书的主要⽬的是为了充分地展现 Python 3.4 的魅⼒,因此我不
会⼀字⼀句地说明如何让本书的代码在旧版本⾥正常运⾏。本书中的⼤pieces
多数例⼦稍做修改(甚⾄不⽤修改)就可以在 Python 2.7 ⾥⾯跑起来,
但是有些例⼦,如果追求向下兼容,就会需要⼤量的重写。
话虽如此,我还是认为,即便你⽆法从 Python 2.7 ⾥脱⾝,这本书也会
对你很有帮助,因为 Pyhon 语⾔的核⼼概念是不会变的。Python 3 也不
是⼀门全新的语⾔,⼤多数的改动花⼀下午⼤概就能适应,官⽅⽂档
⾥“Python 3.0 的新特性”⼀节
然,⾃ 2009 年发布以来,Python 3.0 也在变化,但是这些变化⽐起
Python 3.0 和 Python 2.0 之间的区别,并没有那么重要。
如果你尚不清楚⾃⼰对 Python 的熟悉程度能否跟得上本书的内容,建议
你回头看看 Python 的官⽅教程。注意,除⾮是跟 Python 3 的新特性有
关,教程⾥的其他内容本书不会重复。
⾮⽬标读者
如果你才刚刚开始学 Python,本书的内容可能会显得有些“超纲”。⽐难
懂更糟的是,如果在学习 Python 的过程中过早接触本书的内容,你可能
会误以为所有的 Python 代码都应该利⽤特殊⽅法和元编程
(metaprogramming)技巧。我们知道,不成熟的抽象和过早的优化⼀
样,都会坏事。
本书的结构
如果你是本书的⽬标读者,那你应该可以从本书的任意⼀章开始阅读,
但是如果按照我写作时的构思来的话,本书⼀共分为六个独⽴的部分,
每个部分内的章节最好按照顺序来读。
在介绍让你⾃⼰实现某些功能的⽅法之前,我通常会先把现成可⽤的⼯具讲清楚。⽐如说第⼆部分的第 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 底层的python教程电子版书籍
散列表进⾏深层次的讨论。
第三部分
如何把函数作为⼀等对象(first-order object)来使⽤。第三部分⾸
先会解释前⾯这句话是什么意思,然后话题延伸到这个概念对那些被⼴
泛使⽤的设计模型的影响,最后读者会看到如何利⽤闭包(closure)的
概念来实现函数装饰器(function decorator)。这⼀部分的话题还包括Python 的这些基本概念:可调⽤(callable)、函数属性(function attribute)、内省(introspection)、参数注解(parameter annotation)和Python 3 ⾥新出现的 nonlocal 声明。
第四部分
到了这⾥,书的重点转移到了类的构建上⾯。虽然在第⼆部分⾥的
例⼦⾥就有类声明(class declaration)的出现,但是第四部分会呈现更
多的类。和任何⾯向对象语⾔⼀样,Python 还有些⾃⼰的特性,这些特性可能并不会出现在你我学习idea常用快捷键大全
基于类的编程的语⾔中。这⼀部分的章节
解释了引⽤(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 的交互式控制台来探索各种库和语⾔本
⾝。有些读者可能对静态的需要编译的语⾔更熟悉,但是这些语⾔可能
不会提供 REPL(read-eval-print loop,读取、求值、输出的循环)。在
这⾥我想强调⼀下 Python 交互式控制台,也就是 REPL,作为⼀个学习
⼯具的重要性。
准库,做测试⽤的。这个库通过模拟控制台对话来检验表达式求值是否
正确,⽽本书中⼏乎所有代码的测试,包括那些在控制台⾥的输出,都
是通过这个库来进⾏的。doctest 看起来就像是 Python 交互式控制台的剧本,你甚⾄都不需要了解它背后的运⾏机制就可以直接⽤它来试验书⾥
的例⼦。
我有时为了事先说明⼀段代码的⽬的,会在展⽰代码之前先摆出相应的doctest ⽂本。这是因为我认为,在考虑如何实现⼀个功能之前,先严格
地列出这个功能能做什么,这能帮助我们在编程时把精⼒花在该花的地
⽅。测试驱动开发(TDD)的精髓就是先写测试,我后来发现这种精神
在教学中也是⼤有益处的。如果你对 doctest 还不熟悉,花点时间阅读比利时 德国
控制台⾥键⼊ python3 -m doctest example_script.py 来验证书
中⼏乎所有代码的正确性。
硬件
书中有⼀些简单的时间和基准测试,跑这些测试的时候我⽤的是写书时
的两台笔记本电脑。⼀台是产于 2011 年的 MacBook Pro 13 英⼨笔记本,配置是 2.7 GHz 的英特尔 Core i7 处理器、8GB 的内存和机械硬盘;另⼀台是产于 2014 年的 MacBook Air 13 英⼨笔记本,配置是 1.4 GHz 的英特尔 Core i5 处理器、4GB 内存和⼀个固态硬盘。MacBook Air 的处理器虽然慢⼀些,内存也没有另⼀台多,但是它的内存快⼀些
(1600 MHz,MacBook Pro 13 英⼨则是 1333 MHz),另外它的硬盘也更快,因此在⽇常使⽤中我并没有感觉到两台笔记本有速度上的差异。
杂谈:个⼈的⼀点看法
从 1998 年起,我⼀直在使⽤ Python,也做 Python 教学,另外还⼀直在为它辩护。我⼀直都很享受这个过程,尤其是喜欢研究 Python 同其他语
⾔在设计和理论上的不同。因此在有些章节的最后,我会加上⼀点⾃⼰
对 Python 以及其他语⾔的看法,我把这部分叫作“杂谈”。如果你对这些东西不感兴趣,跳过即可,因为这些并不是必读的。
第 1 章 Python 数据模型右下角弹窗源码
第 2 章 序列构成的数组
jave17xp第 3 章 字典和集合
第 4 章 ⽂本和字节序列
第 5 章 ⼀等函数
第 6 章 使⽤⼀等函数实现设计模ʽ
第 7 章 函数装饰器和闭包
第 8 章 对象引⽤、可变性和垃圾回收
第 9 章 符合Python风格的对象第 10 章 序列的修改、散列和切Ƭ
第 11 章 接⼝:从协议到抽象基类
第 12 章 继承的优缺点
第 13 章 正确重载运算符
第 14 章 可迭代的对象、迭代器和⽣成器
第 15 章 上下⽂管理器和 else 块第 16 章 协程
第 17 章 使⽤期物处理并发
第 18 章 使⽤ asyncio 包处理并发
第 19 章 动态属性和特性
第 20 章 属性描述符
第 21 章 类元编程

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。