《Fluent Python》第一版在 2015 年出版,简体中文版《流畅的Python》在 2017 年出版。从那时起,它就成为了所有 Python 程序员的必读之书。如果一份面向中高级 Python 开发者的书单里不包含这本书,那这份书单肯定不合格!

《Fluent Python》第二版在 2022 年出版,最近,简体中文版《流畅的Python》也隆重上市了!

在收到出版社的赠书后,我发了一条朋友圈,收到了很多点赞,以及咨询最多的两个问题:新书相比于旧版,有什么区别?我是新手,这本书适合我么?

本文将给大家解答这两个问题,另外在文末有赠书福利(送 10 本书),请不要错过哦~

这本书适合哪些读者?

如果你是零基础的 Python 新手,那么这本书不适合你,因为这本书“深入剖析 Python 语言核心特性及底层逻辑”,你可能会感觉它深奥超纲。

如果你是零基础的初学者,那么我推荐你阅读《Python编程:从入门到实践》、《看漫画学Python》这样的入门书籍。但是,在划走之前,请你一定要收藏本文,因为 Python 入门简单,相信你很快就会需要一本指导进阶的书籍了。

除了以上的读者群体外,《流畅的Python》适合于所有 Python 开发者/爱好者,特别地,如果你怀有以下的想法,那么这本书绝对是不二之选:

  • 想要更加熟练地掌握 Python
  • 想要了解实用的编程技巧
  • 想写出地道、优雅、高效的 Python 代码
  • 想要掌握 Python 最新的语言特性

我在两年前写过一篇《如果只推荐一本 Python 书,我要 Pick 它!》,强烈推荐了第一版书籍,你可以从该文看到第一版主要内容的思维导图,以及我的推荐介绍。

如果你没听说过《流畅的Python》,或者没读过第一版的书,我建议你先读一下那篇文章。

在本文中,我主要面向已经了解过这本书的读者,回答大家最为关切的两个疑问:已经读过第一版了,是否还有必要读第二版呢?已经拥有了第一版书籍(不管实体书还是电子书),是否值得再买入第二版呢?

这本书新增了什么内容?

《流畅的Python》作者 Luciano Ramalho 是 Python 软件基金会成员,他深度参与了各类社区活动,熟知大量语言特性的设计过程和差异,他的书具有内容全面而新潮的特点。在第一版写作完成时,Python 3.5 版本还没发布,但是书中已包含了大量 3.5 版本的内容。

第一版英文书籍发布于 2015 年,那时社区中仍有较多 Python 2 用户因循守旧,因此作者的附加意图之一就是展现 Python 3 的魅力,引导老用户们进行迁移。

在随后 7、8 年时间里,Python 社区中发生了很多重大事件:

  • 2015 年,PEP-484 被引入到 Python 3.5 版本,类型提示开始迅猛发展
  • 2015 年以来,asyncio 引入了很多新特性,异步编程越来越好用
  • 2015 年 TensorFlow 发布,2016 年 PyTorch 发布,2017 年 AlphaGo 击败人类世界围棋冠军。2022 年 ChatGPT 发布,各种 AI 模型和应用变得数不胜数
  • 2018 年,Python 之父 Guido van Rossum 卸任“独裁者”,社区开始“指导委员会”治理模式
  • 2020 年,Python 2 彻底停止维护
  • 2023 年,PEP-684 被采纳,PEP-703 也有希望被采纳,GIL 将迎来重大变革……

第二版书籍从 2020 年初开始写作,他这次已不用特意考虑 Python 2 用户了,重点是让读者熟悉 Python 新的功能特性。

英文第二版的上市时间比 Python 3.10.0 的发布时间早了好几个月,但是,书中的示例已基于 3.10 测试过,不仅有大量 3.10 版本的内容,还涉及一些 3.11 版本的变化。

为了凸显出两个版本的差异,这本书每一章的第一节都会介绍“本章新增内容”。得益于作者梳理出的线索,我整理出了一份新增特性的清单(仅为简化版,详细内容请以书本为准):

  • 3.5 版本:原生协程、矩阵乘法运算
  • 3.6 版本:f-string 语法、collections.abc.Collection 抽象基类、异步生成器
  • 3.7 版本:dict 插入有序、@dataclass 装饰器、contextlib 模块新增的几个函数、http.server 的多线程服务器
  • 3.8 版本:仅限位置参数、异步的 REPL、@functools.cached_property、海象运算符(:=)
  • 3.9 版本:||= 运算符、缓存装饰器 functools.cache、泛化类型提示
  • 3.10 版本:模式匹配语法(match-case)、zip() 函数的新功能、带括号的上下文管理器

以上罗列的内容都是各个版本的新特性,表明了这本书紧跟着语言的发展趋势。

除此之外,书中还增加了大量的内容或修改,比如:新增了很多图表、说明框、示例代码和延伸阅读材料;介绍 dict 与 OrderDict 之间的差异、介绍字典的视图对象、super() 函数是如何支持协作多重继承的、如何避免使用继承、使用 HTTPX 库、新增 FastAPI Web 服务示例、使用元类时的注意事项……

以上提到的新内容和修改点,主要都分散在第一版原有的内容里。另外,对于一些重点话题,作者在第二版里增加了大量的篇幅,比如新增两章内容重点介绍类型提示(《第8章 函数中的类型提示》、《第15章 类型提示进阶》)、增加大量并发编程内容(新增一章《第19章 Python并发模型》、新增 asyncio 异步编程内容)……

在翻阅新书的时候,我还注意到了几个值得一提的章节(都是第一版没有的内容):

  • 第 13 章对四种类型的划分讨论(鸭子类型、大鹅类型、静态鸭子类型、静态类型),不再是常规的类型分类角度(即动态类型、静态类型、强类型、弱类型),而是将类型提示以及抽象基类整合进来,作者画的图例让我感觉耳目一新
  • 第 2.6 节不仅介绍了最新的模式匹配(match-case)语法,还用它重构了一个解释器 lis.py 代码。然后到了第 18.3 节,作者又进一步分析 lis.py 的整体机制,试图让我们感受到“地道的 Python 代码体现的编程美感”,通过介绍 Scheme 句法,让 Python 开发者感受“简单的语言设计哲学如何让 Scheme 成为大师级作品”
  • 第 21.9.1 节使用 FastAPI 框架实现 Web 服务,舍弃了第一版中用到的 aiohttp,这为近几年已十分流行的 FastAPI 又助力推了一把

《流畅的 Python》的内容十分庞博,信息密度极高,作者是个绝对的细节控和整理大师。在主体的文本外,那些密集的提示框、注释、延伸阅读和杂谈,在知识广度和深度上让人叹为观止。

第二版除了新增大量内容外,还调整了很多原有章节的次序,图灵教育整理了全书的思维导图如下:

总体而言,第二版的变化之大超出了我的预期,值得我们暂时忘记第一版,然后把它当做一本全新的书仔细研读。购入实体书也很有必要,因为很多章节彼此关联,实体书比较便于查找目标章节,也便于阅读完整的上下文信息。

其它的变化

在解答完大家最为关切的问题后,我还想补充几点。

首先是关于印刷,第二版分成了上下两册,用纸也更为讲究,比第一版轻薄许多,对比沉甸甸的第一版,我个人感觉新版的阅读体验提升了不少。

其次是关于翻译,第二版修改了旧版翻译不到位或不准确的很多内容。比如,第一版将“Goose typing”翻译成“白鹅类型”,第二版修改成了“大鹅类型”;第一版将“Boolean Value of a Custom Type”错误译成了“自定义的布尔值”,第二版修正为“自定义类型的布尔值”;第一版将“When a List Is Not the Answer”译成“当列表不是首选时”,第二版修改成“当列表不适用时”……

“goose”是“鹅”,为了跟“鸭子类型”对照,最好翻译成两个字,但鹅不一定是白色,却普遍体型大于鸭子,因此我觉得改成“大鹅类型”是贴切的。另外两个例子出自前两章的小标题,比较显眼易见,书中还有不少翻译调整之处,就不一一列举了。

最后很值得关注的是,作者在创作第二版时,为新书搭建了一个网站,里面已收录了多篇没有写到书中的文章,可以作为辅助材料。

网站文章目前包括:经典的协程(高能预警:这篇特别长,是对书中第 17.13 章的强力补充)、使用 bisect 处理有序序列、 集合与字典的内部实现、对象的弱引用,等等。

福利环节

本次赠书共 10 本,有效期至 5 月 2 日 12 点。

抽奖送书(5本):给公众号【Python猫】发送数字“0428”,获取抽奖二维码后参与。

评论送书(5本):有两种评论方式,任选其一即可。方式1,从公众号里加猫哥为好友后,在朋友圈评论“你想获得赠书的理由”;方式2,将本文转发到你的社交圈之一(朋友圈或技术群或头条号或微博或其它交流平台),写上你对本书的评论/推荐语,然后发截图给我。

抽奖送书,各凭运气;评论送书,我会择优录用,奖品不叠加。若有弃奖,则奖品在微信读者群内抽奖送出。最后,感谢人民邮电出版社对本次活动的赞助。

《流畅的Python》第二版上市了,值得入手么?的更多相关文章

  1. selenium webdriver (python) 第二版

    前言 对于大多软件测试人员来讲缺乏编程经验(指项目开发经验,大学的C 语言算很基础的编程知识)一直是难以逾越的鸿沟,并不是说测试比开发人员智商低,是国内的大多测试岗位是功能测试为主,在工作时间中,我们 ...

  2. 流畅的python第二十章属性描述符学习记录

    描述符是对多个属性运用相同存取逻辑的一种方式.例如,Django ORM 和 SQL Alchemy等 ORM 中的字段类型是描述符,把数据库记录中字段里的数据与 Python 对象的属性对应起来.描 ...

  3. 流畅的python第二章序列构成的数组学习记录

    python内置序列类型概览 列表推导和生成器表达式 列表推导是构建列表的快捷方式,而生成器表达式可以用来创建其他任何类型的序列 列表推导的示例 >>>test = [i*2 for ...

  4. 合并百度影音的离线数据 with python 第二版 基于yield

    重新整理了一下代码. 增加了bdv,mkv的处理流程. 目前暂时支持windows平台. bdv,mkv,rmvb的不同处理流程 # -*- coding: UTF-8 -*- import os i ...

  5. 拒绝从入门到放弃_《Python 核心编程 (第二版)》必读目录

    目录 目录 关于这本书 必看知识点 最后 关于这本书 <Python 核心编程 (第二版)>是一本 Python 编程的入门书,分为 Python 核心(其实并不核心,应该叫基础) 和 高 ...

  6. python核心编程第二版笔记

    python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d   提供调试输出1.2 –O   生成优化的字节码(生成 ...

  7. 《OpenCV3 计算机视觉--Python语言实现 第二版》源代码及纠错

    1.源代码下载地址 <OpenCV3 计算机视觉--Python语言实现 第二版>由我们翻译,英文书名<Learning OpenCV3 Computer Vision with P ...

  8. 利用Python进行数据分析(第二版)电子版书籍分享

    资料下载地址: 链接:https://pan.baidu.com/s/1y1C0bJPkSn7Sv6Eq9G5_Ug 提取码:vscu <利用Python进行数据分析(第二版)>高清中文版 ...

  9. 零基础学python》(第二版)

    ---恢复内容开始--- 零基础学python>(第二版) python学习手册 可以离线下载,  .chn格式, 插入小幽默笑话,在学习累的时候看看笑话 放松一下 欢迎下载转载,请注明出处,谢 ...

  10. Python精要参考(第二版)

    ython 精要参考(第二版) 是Python语言初学者不错的参考学习用书,本系列译自Python Essential Reference, Second Edition 希望本系列可以给python ...

随机推荐

  1. Servlet的学习之路

    一.什么是什么Servlet? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程 ...

  2. shader graph 制作的双面shader

  3. DVWA-XSS (Reflected) 反射性 XSS

    反射性XSS,是非持久性,也是最常见的XSS,通过解析传入前段页面,常见为交互式输入框 LOW 审计源码 <?php // 发送请求头 header ("X-XSS-Protectio ...

  4. 对于利用JavaBean+Servlet+jsp实现增删改查功能题目的实现

    首先,为了更好地规范代码,可以分别将不同用处的Java文件放置到不同的文件夹里面 对于实体类,可以放在名为Bean的package里面 对于中间用来实现Java与jsp页面交互的类,可以放在名为Ser ...

  5. Java8 获取当天日期的前一天

    LocalDateTime.now().plusDays(-1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))

  6. java多线程--6 死锁问题 锁Lock

    java多线程--6 死锁问题 锁Lock 死锁问题 多个线程互相抱着对方需要的资源,然后形成僵持 死锁状态 package com.ssl.demo05; public class DeadLock ...

  7. day09-拦截器&文件上传

    拦截器&文件上传 1.拦截器-Interceptor 1.1拦截器概念 拦截器 拦截器(Interceptor):是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行. ...

  8. 关于springboot使用mybatis查询出现空指针,以及debug出现All Elements all Null的解决方法

    数据库中命名方式是带有下划线 ,然后在实体类中使用的是驼峰命名法 ,那么就需要在application.yml文件中加上 自闭了,那么简单的问题,没了解过真是摸不着头脑

  9. Pause Giant AI Experiments: An Open Letter(暂停大型人工智能实验: 一封公开信)

    Pause Giant AI Experiments: An Open Letter(暂停大型人工智能实验: 一封公开信) 前几天在 futureoflife 网站上有一封公开信,呼吁暂停大型人工智能 ...

  10. python入门教程之十三错误和异常

    作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍. Python 有两种错误很容易辨认:语法错误和异常. Python as ...