溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python進(jìn)階必讀的書是什么

發(fā)布時(shí)間:2021-11-23 16:35:03 來(lái)源:億速云 閱讀:157 作者:iii 欄目:大數(shù)據(jù)

本篇內(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í),建議直接使用maxmin方法

  • 當(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)是最小的元素。

Python進(jìn)階必讀的書是什么

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

>>> heapq.heappop(heap)
-4
 

Python進(jìn)階必讀的書是什么

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

>>> heapq.heappop(heap)
1
>>> heapq.heappop(heap)
2
 

Python進(jìn)階必讀的書是什么

當(dāng)然,也可以直接使用nsmallest獲取前幾個(gè)最小值。

“Python進(jìn)階必讀的書是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI