cover_image

图书推荐:《流畅的Python》(第二波赠书)

董伟明 Python之美
2017年06月05日 03:10


图片

我刚学编程的时候,有位从事C++开发的好友,传授我经验:

工作中80%的时间用着那常用的20%的语言知识,其他的等你需要的时候再去看就好了

设想在初学Python(或者其他语言)的时候我只是去学习那20%常用的,如果再不愿意去精进,那么可能我永远都不会有机会去了解描述符,也不会使用元类,最后成了一个以为已经会编程、熟悉Python的井底之蛙,所以当时我是拒绝的。因为我希望全面的了解这个语言的能力边界,可能一些高级特性我并不需要掌握,但是在未来要用的时候要知道其实它能不能做到。当我一路走来事实上却也多次使用「等需要的时候再去看」这个技巧,一方面精力有限,一方面也是没有一本好书把这些工作中不太常用、难以理解的进阶内容整理出来。

《流畅的Python》就是这样一本难得的Python进阶书。很多新人可能不知道为什么这本书在圈内这么有名气,这是因为它是一本专门介绍那些Python语言里面高级的,甚至独有的特性的书,熟悉这些内容对工程师会有很大的提高。说个题外话,我之前面试别人时还考过不少这本书里面的内容,不过结果比较惨....

反观市面上充斥了大量的入门书,它们只会教你们学习那些Python官方网站就能学习到的Python的语法(这也是为什么很多人推荐直接看官方文档来学习),作者限于自身的技术实力,往往都会避免提及语言的本质、高级用法、独有的观点等,写出来的代码也就更谈不上Pythonic和Idiomatic了。而在《流畅的Python》里面你可以学到了很多实践方法、语法特性和作者的理解以及建议,最重要的是帮助你树立了正确的价值观。我举几个例子吧:

延伸阅读 & 杂谈

每章最后都有「延伸阅读」章节列出来一些演讲PPT、视频、访谈等内容的地址、书籍相关章节等内容,让你看书之外还有所延伸;另外「杂谈」章节比较有意思,都是作者对于对应章节内容的理解和观点,比如「使用期物处理开发」那章,他说:

我觉得 concurrent.futures 包很棒,它把线程、进程和队列视作服务的基础设置,不用自己动手直接处理。

这真的是concurrent.futures的核心特点。希望这个包越来越被大家认可。

GIL

唉,这个话题很沉重。很多人黑Python都喜欢这一点。书中对GIL有比较深入的说明,尤其是提到了下面这句(敲黑板,各位注意了):

GIL是CPython解释器的局限,与Python语言无关。Jython和IronPython没有这种限制。

闭包

「什么是闭包?」是一道非常常见的面试题。网上可以搜到很多博客文章都在说它,但是我印象里面没有发现谁总结的比这本书更简洁和明确:

闭包指延伸了作用域的函数,其中包含函数定义体中引用,但是不在定义体中定义的非全局变量... 它能访问定义体之外定义的非全局变量。

正统的发音

在我刚学Django的时候,我以为发音是[diˈdʒæŋɡoʊ],在参加第二届Pycon的时候,才知道原来d是不发音的,应该读作 [ˈdʒæŋɡoʊ]。像这样的本书也说到了一个地方,就是init怎么读。我同事都知道我习惯说「双下划线-init」(under-under-init),其实正确的应该叫做「双下-init」(这翻译很对我胃口哇哈哈😝),和我之前理解的差不多哇。但是第一次知道这种特殊方法也叫作dunder(double under) method。

asyncio

asyncio是未来的趋势,但是直到现在阐述它的工作原理的内容依然很少,现有出版的书中对它写的也少(我那本书也只是用了一小节罢了,不过机智如你们关注了我的公众号是可以看到很多asyncio内容的),大部分人可能只能去看官方文档,而这本书也并没有避开被很多人称为Python界最难理解(或者最难习惯)的库之一,花了一章来介绍它。

在==和is之间选择

如果你使用Python工作,==和is这2种用法会比较常见,细心的同学会去思考应用场景的区别,不过这依然会让你花费时间去搜寻答案和理解,其实书中一语点中:

==运算符比较两个对象的值(对象中保存的数据),而is比较对象的标识。

而且你从SO找到的只是区别,没人说背后的原因,但是书中的作者告诉你:

is运算符比==速度快,因为它不能重载,所以Python不会寻找并调用特殊方案,而是直接比较ID, 而 a == b 是语法糖,等同于a.eq(b)...

正确的价值观

当我新学会一个语言特性之后,我就很想找机会把它用起来。在我学Python的早期我甚至并不关心场景是不是合适,就是单纯的希望实践,随着越来越了解Python,这种情况就越来越少了。不过我依然能看到很多人在滥用Python的一些语法特性,这本书会告诉你:

  1. 什么时候用,如何用?

  2. 工作原理是什么?

  3. 什么时候不应该用?

在介绍元类的时候作者就明确说:

在进入本章的正文之前,我必须告诫你: 除非开发框架,否则不要编写元类 -- 然后,为了寻找乐趣,或者联系相关的概念,可以这么做。

这就是正确的价值观。我脑海里面想了一下我过去用元类的地方,其实大部分都不是必须的:只是让代码显得有逼格一点罢了。

翻译的质量

客观的说,这本书有一些翻译上的瑕疵吧,其中最大的槽点莫过于「Futures」翻译成了「期物」。另外把「Decorators for Coroutine Priming」翻译成了「预激协程的装饰器」,让我也是很懵,其实就是「自动启动协程的装饰器」的意思。

不过这么几个翻译上的问题对本书的整体质量并没有什么影响,安道已经翻译了很多技术图书,包括Python界知名的狗书(《Flask Web开发 基于Python的Web应用开发实战》,封面是只🐶),以我了解到的国内的技术书籍译者中已经没有更好的人选了。

赠书

这是第二波增书活动的,(第一波见 https://zhuanlan.zhihu.com/p/27063533),可以点击文末的「阅读原文」进入专栏页面,也可以扫描如下二维码直接进入:

图片

我向图灵编辑英子谋了另外5本《流畅的Python》福利给大家。抽奖规则和之前的不同:

活动时间

2017 年 6 月 5 日—— 2017 年 6 月 8 日

参与方式

  1. 发表评论,讲讲「最喜欢Python语言的特性或者你和Python的故事」,最后加上任意一个两位数(例如 37 )。重复评论只取第一次评论。

  2. 取 2017 年 6 月 9 日当日彩云天气App中PM2.5空气质量指数(AQI)的最高和最低值的乘积的十位和个位,如下图:

    图片昨天也就是6月4日的值为 133*46=6118, 那就是“ 18 ”,按发表评论时间排序,最早最接近的前5位同学,将获得本书一本。书将从出版社直接寄出,感谢图灵对本活动的支持 🎉🎉🎉


  3. 抽奖结果将在 2017 年 6 月 10 日揭晓。温馨提示,由于空气环境非常复杂,AQI的预测并不准,请谨慎参考。

  4. 本人保留此次活动的最终解释权。

图片


继续滑动看下一个
Python之美
向上滑动看下一个