推薦 + 贈書 《Python 3學習筆記(上卷)》
前言
「如何學習編程」每個人都有自己的答案,在我初學Python的時候,我就非常關注大神們的學習方式和成長之路。工作這麼些年過來,我發現大家入門和學習的共同點非常統一:讀書、看源碼、高頻率的實踐和動手,對於現在的同學還可以選擇看視頻。
在我的印象裡面,大神TJ Holowaychuk的學習方法讓我記憶深刻,大概4-5年前我看過一個介紹,但是找不到印象里的那篇了,只找到了這篇 TJ Holowaychuk是怎樣學習編程的?。TJ的學習方法很特別:
也不讀書,從不去聽課,我就是去閱讀別人的代碼,並搞清楚那些代碼是如何工作的。
而《Python 3學習筆記(上卷)》作者雨痕在我印象裡面就是這樣通過閱讀CPython源代碼來學習Python的。
qyuhen/book
雨痕前輩從1996年開始從事計算機軟體開發工作,從2006年接觸Python,他的qyuhen/book在2013年的時候就已經非常知名了。這個項目下是除了Python筆記,還有Go,C方面的學習筆記。
第一次閱讀《Python學習筆記》就被它的內容吸引,雖然只是作者的學習筆記,但是依然不影響對於學習Python的開發者的意義,我覺得這個筆記有2個顯著的特點:
1. 從解釋器和CPython源碼實現的角度剖析語言語法
2. 通過在交互環境中的實驗去證明和驗證細節,獲得結論
可以說這本書對13年的我來說,有很大的幫助。當然這個筆記裡面還有一些有意思的點,我在14年的 Python高級編程 分享中PPT一上來就引用了這個筆記中提到的怎麼讓Python支持end(PS,知乎編輯器的語言高亮有bug,沒生效,大家忍一忍吧):
__builtins__.end = Nonedef test(x): if x > 0: print "a" else: print "b" endenddef main(): test(1) print(I can use end!)end
嗯,這不是ruby。其實能這麼寫的根本原因就是end被解釋成了None,寫成什麼都可以:
__builtins__.endif = Nonedef test(x): if x > 0: return True endiftest(1)
之後雨痕老師的《Go語言學習筆記》出版了,但是《Python學習筆記》卻沒有動靜,我既有失望也滿懷期待,想必沒有考慮出版它是由於這個筆記是針對 Python2.7 的。
但是不要緊,《Python 3學習筆記(上卷)》來了。
薦書
關注我的同學應該都知道我是不願意參與薦書的,我得對訂閱者負責。我沒看過的、覺得不好的書我是不可能推薦給別人的。
目前我正式的薦書只有《流暢的Python》和平時在群里說到的《Python編程 從入門到實踐》,《Python 3學習筆記(上卷)》是我推薦的第三本書。節前就收到了樣書,剛剛讀完,給大家分享一下讀後感。
本書的特點
1. 書中內容基於目前最新的Python 3.6版本,書中提到的一些最新的Python內容還很少有中文書或者博客來介紹。在2018年這個節點,如果一本新書還在講Python 2,反正我是不會買了。
2. 同樣是從解釋器和CPython源碼實現的角度剖析語言語法。市面上大部分的教程都是在告訴你應該怎麼用,但是背後隱藏的細節和原理卻很少提及,這本書對這些並不避諱,而更像是想弄清楚解釋器執行的流程和細節。尤其是在「解釋器」章節裡面除了從源碼上分析GIL,還有內存分配、垃圾回收和Python執行過程的方面的內容。
3. 配圖豐富、簡單易懂。同作為圖書作者,我很了解做配圖是一件很耗時辛苦的事情,既要對配圖的內容理解非常深刻,也要讓它直觀好懂是很難的,這本書這點做的就不錯。
4. 通過在交互環境中的實驗去證明和驗證細節,獲得結論。這是我非常喜歡的方式,作為一個讀者用這樣的方式學習知識是很輕鬆愉快的.
5. 概念定義深刻準確。雨痕老師的編程經驗非常豐富,對Python也很熟悉,對一些知識點的定義和理解非常好。
我舉2個例子:
1.「包和模塊」。有多少人不能清晰區分他倆?我看到很多同學用這2個詞的時候很隨意,這本書裡面是這麼說的:
模塊( module) 是頂層代碼組織單元,其提供大粒度的封裝和復用...
如果說模塊用於組織代碼,那麼包就是用來組織模塊的...
我的感覺是總結非常到位。
2. 藉助生成器切換執行功能,改善程序的結構設計。我舉書中列出的2個例子,第一個是生產消息模型:
def consumer(): while True: v = yield print(fconsume: {v})def producer(c): for i in range(10, 13): c.send(i)c = consumer()c.send(None)producer(c)c.close()
當然作者也提到如果有多個消費者或者數據處理時間較長,還是建議使用專業的並發方案。第二個是消除回調。我們先看看非同步回調的模式:
import timeimport threadingdef target(request, callback): s = time.time() request() time.sleep(2) callback(fdone: {time.time() -s })def request(): print(start)def callback(x): print(x)def service(request, callback): threading.Thread(target=target, args=(request, callback)).start()
我一直不喜歡回調,這種介面設計的方式會讓代碼和邏輯分散開,維護性很差。如果使用生成器怎麼做呢?
def request(): print(start) x = yield print(x)def target(fn): try: s = time.time() g = fn() g.send(None) time.sleep(2) g.send(fdone: {time.time() -s }) except StopIteration: passdef service(fn): threading.Thread(target=target, args=(fn,)).start()service(request)
這樣就不需要callback性質的額外參數了,通過yield讓程序邏輯看起來是串列的。
我要強調一下:**這本書並不是適合入門,它假定讀者已經有一定的編程和Python基礎** 。所以更適合已經熟悉Python語言語法,使用Python寫過程序的開發者,如果你正準備遷移Python 2的代碼到Python 3.6這本書就更值得看一看了。
在上個月發布的《愛湃森 2017年度Python榜單》中,我也把這本書放到了 2018年最值得期待的國內出版的Python書籍 的第二位(那會我還沒拿到樣書),現在看來這本書也物超所值,對我這種Python老手來說,看書獲取新知識的幾率已經不高,但是從這本書裡面我還是收穫了很多。我舉幾個印象深刻的例子:
1. 池化。之前沒了解過,就是相同名字可能會重複出現在不同的名字空間里,就有必要共享實例,這樣節約內存,也省去了創建新實例的開銷,所以Python實現了字元串池。
2. SimpleNamespace。之前我想快速的構建一個結構化的實例會用namedtuple,但是缺點是它構建出來的是一個類型:
In [5]: Point = namedtuple(Point, [x, y]) # 構建出來的是一個類,而且傳遞參數的效果也不直觀,field_names需要是一個列表或者空格分割的字元串,不方便In [6]: p = Point(1, 2) # 我還得實例化一下Point才能用In [7]: p.x, p.yOut[7]: (1, 2)
這樣不方便,SimpleNamespace就可以直接創建實例:
In [8]: from types import SimpleNamespaceIn [9]: p = SimpleNamespace(x=1, y=2)In [10]: p.x, p.yOut[10]: (1, 2)
這樣用起來就方便多了。
3. 自定義異常類的名字。我以前自定義異常的名字比較隨意,XyzException或者XyzError通常有點看心情或者仿之前名字格式,這本書這樣說的「內置異常多以Error結尾,但建議以Exception、Error後綴區分可修復異常和不可修復異常」,我覺得說得對...
上述這幾點算是我的讀書筆記,詳細的還得看書中原文哦。
希望國內能出現越來越多的好書!有能力有想法的同學,可以私信我幫你聯繫出版社喲
贈書
之前已經在公眾號「Python之美」裡面做了次抽獎活動,使用抽獎助手自動開獎了。 我也向電子工業出版社謀了5本《Python-3學習筆記(上卷)》福利給知乎訂閱本專欄的同學。唉,上周又霧霾了幾天,為了提醒大家關注空氣質量,抽獎方式和上次 推薦 + 贈書《流暢的Python》形式相同:
活動時間
2018 年 3 月 1 日—— 2018 年 3 月 4 日
參與方式
- 發表評論,講講現階段你和Python的故事,最後加上任意一個兩位數(例如 37 )。重複評論只取第一次評論。另外,不如順手點個贊? ?(? ? ??)
- 取 2018 年 3 月 5 日當日彩雲天氣App中 北京 故宮博物院 PM2.5空氣質量指數(AQI)的最高和最低值的乘積的十位和個位,如下圖:
上圖中可以看到昨天的值為 133*46=6118, 那就是「 18 」,按發表評論時間排序,最早最接近的前5位同學,將獲得本書一本。書將從出版社直接寄出,感謝電子工業出版社對本活動的支持 ??????
- 抽獎結果將在 2018 年 3 月 6 日揭曉。溫馨提示,由於空氣環境非常複雜,AQI的預測並不准,請謹慎參考。
- 本人保留此次活動的最終解釋權。
購書推薦
畢竟人多書少,如果想馬上購買的,建議選擇噹噹哦??,因為噹噹的昊楠老師特別給做了一個促銷活動,現在是6.7折,價格遠低於京東和亞馬遜,這個折扣基本就是618或者雙十一才會有的,而且這次「單品包郵促銷」也就是我做活動這1-2周,抽獎不中的,不要錯過喲。
另外有些同學說其他渠道疊加優惠券之類的會便宜,如果確實你也想買其他的書也正好湊個合適的價格,當然要選擇更便宜的啦,但是別為了便宜而買一些不看的書,書不是用來收藏了喲
購買鏈接是:《【單品包郵】Python 3學習筆記(上卷)》(雨痕…) -噹噹觸屏版
推薦閱讀:
※一張圖入門 Python — 附全面Python學習資料【動腦學院】整理
※Python小結(二)(2017.10.4-2017.10.15)
※如何在Windows下安裝Scrapy
TAG:Python |