1本流利的简单的Python书,值得一看《流畅的Python》
我会经常分享一本书。我分享的书,你看完如果对你有帮助,值得你购买,请到官网购买正版书籍。
声明:我不是卖书的,我搞得是Python技术,文章最后免费为你准备了一些Python资料。
本书致力于帮助Python开发人员挖掘这门语言及相关程序库的优秀特性,避免重复劳动,同时写出简洁、流畅、易读、易维护,并且具有地道Python风格的代码。本书尤其深入探讨了Python语言的高级用法,涵盖数据结构、Python风格的对象、并行与并发,以及元编程等不同的方面。
本书特色
本书由奋战在Python开发一线近20年的Luciano Ramalho执笔,Victor Stinner、Alex Martelli等Python大咖担纲技术审稿人,从语言设计层面剖析编程细节,兼顾Python 3和Python 2,告诉你Python中不亲自动手实践就无法理解的语言陷阱成因和解决之道,教你写出风格地道的Python代码。
● Python数据模型:理解为什么特殊方法是对象行为一致的关键。
● 数据结构:充分利用内置类型,理解Unicode文本和字节二象性。
● 把函数视作对象:把Python函数视作一等对象,并了解这一点对流行的设计模式的影响。
● 面向对象习惯用法:通过构建类学习引用、可变性、接口、运算符重载和多重继承。
● 控制流程:学习使用上下文管理器、生成器、协程,以及通过concurrent.futures和asyncio包实现的并发。
● 元编程:理解特性、描述符、类装饰器和元类的工作原理。
目录
第一部分 序幕,第 1 章 Python 数据模型阅读第二部分 数据结构,第 2 章 序列构成的数组,第 3 章 字典和集合,第 4 章 文本和字节序列第三部分 把函数视作对象,第 5 章 一等函数第 6 章 使用一等函数实现设计模式第 7 章 函数装饰器和闭包第四部分 面向对象惯用法第 8 章 对象引用、可变性和垃圾回收第 9 章 符合 Python 风格的对象第 10 章 序列的修改、散列和切片第 11 章 接口:从协议到抽象基类第 12 章 继承的优缺点第 13 章 正确重载运算符第五部分 控制流程第 14 章 可迭代的对象、迭代器和生成器第 15 章 上下文管理器和 else 块第 16 章 协程第 17 章 使用期物处理并发第 18 章 使用 asyncio 包处理并发第六部分 元编程第 19 章 动态属性和特性第 20 章 属性描述符第 21 章 类元编程结语
前言
目标读者
本书的目标读者是那些正在使用 Python,又想熟悉 Python 3 的程序员。如果你懂 Python 2,但是想迁移到 Python 3.4 或者更新的版本,也没问题。在写这本书的时候,大多数专业 Python 程序员用的还是 Python 2,因此如果书中出现来自 Python 3 的特性,读者可能会感到陌生,我也会特别地做出解释。
然而,本书的主要目的是为了充分地展现 Python 3.4 的魅力,因此我不会一字一句地说明如何让本书的代码在旧版本里正常运行。本书中的大多数例子稍做修改(甚至不用修改)就可以在 Python 2.7 里面跑起来,但是有些例子,如果追求向下兼容,就会需要大量的重写。
话虽如此,我还是认为,即便你无法从 Python 2.7 里脱身,这本书也会对你很有帮助,因为 Python 语言的核心概念是不会变的。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 库应该会简单一些。最后,我认为在看过一些实际的案例之后,理解抽象会更轻松。
当然,这样也会带来一些不便之处,比如书里的向前引用就会分散在各个不同的章节里面。但是经过上述这番梳理,我想这一点不便之处也是可以容忍的。
【作者简介】
Luciano Ramalho,从1998年起就成为了Python程序员。他是Python软件基金会的成员,Python.pro.br(巴西的一家培训公司)的共同所有者,还是巴西众创空间Garoa Hacker Clube的联合创始人。他领导过多个软件开发团队,还在巴西的媒体、银行和政府部门教授Python课程。