Python 進階必讀書,附 PDF 翻譯版下載
python cookbook 一書非常經(jīng)典,作者David Beazley,擁有超過20年的Python使用經(jīng)驗,再加上他很強的寫作技能,所以值得一看。
它的翻譯版本也有很多,其中比較優(yōu)秀的版本是yidao620c翻譯的,今天查閱翻譯作者,就職華為。當然,最重要的還是書的內(nèi)容好,這種按照一個小的話題展開討論的方式,相信很多Python愛好者都比較喜歡。
這本書的話題要想理解透,還是需要具備一定的Python基礎,不太適合純Python小白。下面說說這本書,到底好在哪里,該怎么使用。
這是它的整體大綱目錄,一共包括十五章,分別討論:數(shù)據(jù)結構,字符串,數(shù)字,迭代器和生成器,文件與IO,函數(shù)、類、模塊,網(wǎng)絡編程,并發(fā)與測試。

這些都屬于Python中最最核心的知識模塊,原書作者David個人推薦解決現(xiàn)實問題時,優(yōu)先考慮Python中內(nèi)置的模塊是否能解決問題。
那么這本書到底好在哪里呢?它分話題展開討論,每個話題都足夠精簡,無廢話。最大限度的從實際應用總結每個知識點,比如在話題:保留最后N個元素時,編寫的代碼就很漂亮:
from?collections?import?deque
def?search(lines,?pattern,?history=5):
????previous_lines?=?deque(maxlen=history)
????for?line?in?lines:
????????if?pattern?in?line:
????????????yield?line,?previous_lines
????????previous_lines.append(line)
#?Example?use?on?a?file
if?__name__?==?'__main__':
????with?open(r'../../cookbook/somefile.txt')?as?f:
????????for?line,?prevlines?in?search(f,?'python',?5):
????????????for?pline?in?prevlines:
????????????????print(pline,?end='')
????????????print(line,?end='')
????????????print('-'?*?20)
保留有限歷史記錄正是 collections.deque 大顯身手的時候,難得是作者會對上面的代碼做了簡要的分析:
我們在寫查詢元素的代碼時,通常會使用包含
yield表達式的生成器函數(shù),也就是我們上面示例代碼中的那樣。這樣可以將搜索過程代碼和使用搜索結果代碼解耦
讓我們真正明白到底好在哪里,以及Python內(nèi)置的模塊真的很強大。
再比如作者在討論查找最大或最小的 N 個元素這個話題時,表面上這是一個很簡單的話題,其實如果要考慮的全面,也是需要留意一些事情的。作者分別討論了:
當查找元素個數(shù)
N = 1時,建議直接使用max或min方法當查找元素個數(shù)接近整個列表長度時,建議使用
sorted函數(shù)以切片的方式獲取當要查找的元素個數(shù)相對比較小的時候,函數(shù)
nlargest()和nsmallest()是很合適的
相信大家都對前兩種情況的解決方法比較熟悉,第三種使用內(nèi)置模塊heapq是算法中的堆結構,常見的大根堆,小根堆,
>>>?nums?=?[1,?8,?2,?23,?7,?-4,?18,?23,?42,?37,?2]
>>>?import?heapq
>>>?heap?=?list(nums)
>>>?heapq.heapify(heap)
>>>?heap
[-4,?2,?1,?23,?7,?2,?18,?23,?42,?37,?8]
>>>
Python中heapify后,默認建立一個小根堆。它最重要的特征是 heap[0] 永遠是最小的元素。

比如,如果想要查找最小的 3 個元素,你可以這樣做,首先執(zhí)行一次heappop后,次小元素變?yōu)樽钚?,如下圖所示:
>>>?heapq.heappop(heap)
-4

再次執(zhí)行兩次后,就能得到列表的前三個最小的元素為[-4,1,2],此時的小根堆為如下圖所示:
>>>?heapq.heappop(heap)
1
>>>?heapq.heappop(heap)
2

除此之外,這本書還有很多有趣且實用的Python知識,都值得我們仔細學習。這是第一張討論的20個話題:

如果你對解壓可迭代對象賦值給多個變量還不是太了解,建議下載這本電子書抽空學習一下。這本書的電子版也是目前最好的yidao620c.
下載方式如下,關注Python小例子并回復pycook
Python小例子,長按關注
