您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“Python進(jìn)階必讀的書是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
python cookbook 一書非常經(jīng)典,作者David Beazley
,擁有超過(guò)20年的Python使用經(jīng)驗(yàn),再加上他很強(qiáng)的寫作技能,所以值得一看。
它的翻譯版本也有很多,其中比較優(yōu)秀的版本是yidao620c翻譯的,今天查閱翻譯作者,就職華為。當(dāng)然,最重要的還是書的內(nèi)容好,這種按照一個(gè)小的話題展開(kāi)討論的方式,相信很多Python愛(ài)好者都比較喜歡。
這本書的話題要想理解透,還是需要具備一定的Python基礎(chǔ),不太適合純Python小白。下面說(shuō)說(shuō)這本書,到底好在哪里,該怎么使用。
這是它的整體大綱目錄,一共包括十五章,分別討論:數(shù)據(jù)結(jié)構(gòu),字符串,數(shù)字,迭代器和生成器,文件與IO,函數(shù)、類、模塊,網(wǎng)絡(luò)編程,并發(fā)與測(cè)試。這些都屬于Python中最最核心的知識(shí)模塊,原書作者David個(gè)人推薦解決現(xiàn)實(shí)問(wèn)題時(shí),優(yōu)先考慮Python中內(nèi)置的模塊是否能解決問(wèn)題。
那么這本書到底好在哪里呢?它分話題展開(kāi)討論,每個(gè)話題都足夠精簡(jiǎn),無(wú)廢話。最大限度的從實(shí)際應(yīng)用總結(jié)每個(gè)知識(shí)點(diǎn),比如在話題:保留最后N個(gè)元素時(shí),編寫的代碼就很漂亮:
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
大顯身手的時(shí)候,難得是作者會(huì)對(duì)上面的代碼做了簡(jiǎn)要的分析:
我們?cè)趯懖樵冊(cè)氐拇a時(shí),通常會(huì)使用包含
yield
表達(dá)式的生成器函數(shù),也就是我們上面示例代碼中的那樣。這樣可以將搜索過(guò)程代碼和使用搜索結(jié)果代碼解耦
讓我們真正明白到底好在哪里,以及Python內(nèi)置的模塊真的很強(qiáng)大。
再比如作者在討論查找最大或最小的 N 個(gè)元素
這個(gè)話題時(shí),表面上這是一個(gè)很簡(jiǎn)單的話題,其實(shí)如果要考慮的全面,也是需要留意一些事情的。作者分別討論了:
當(dāng)查找元素個(gè)數(shù)N = 1
時(shí),建議直接使用max
或min
方法
當(dāng)查找元素個(gè)數(shù)接近整個(gè)列表長(zhǎng)度時(shí),建議使用sorted
函數(shù)以切片的方式獲取
當(dāng)要查找的元素個(gè)數(shù)相對(duì)比較小的時(shí)候,函數(shù) nlargest()
和 nsmallest()
是很合適的
相信大家都對(duì)前兩種情況的解決方法比較熟悉,第三種使用內(nèi)置模塊heapq
是算法中的堆結(jié)構(gòu),常見(jiàn)的大根堆,小根堆,
>>> 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后,默認(rèn)建立一個(gè)小根堆
。它最重要的特征是 heap[0]
永遠(yuǎn)是最小的元素。
比如,如果想要查找最小的 3 個(gè)元素,你可以這樣做,首先執(zhí)行一次heappop后,次小元素變?yōu)樽钚?,如下圖所示:
>>> heapq.heappop(heap)
-4
再次執(zhí)行兩次后,就能得到列表的前三個(gè)最小的元素為[-4,1,2]
,此時(shí)的小根堆為如下圖所示:
>>> heapq.heappop(heap)
1
>>> heapq.heappop(heap)
2
當(dāng)然,也可以直接使用nsmallest獲取前幾個(gè)最小值。“Python進(jìn)階必讀的書是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。