本篇內(nèi)容介紹了“Python進(jìn)階必讀的書是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比西陵網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式西陵網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋西陵地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。
python cookbook 一書非常經(jīng)典,作者David Beazley
,擁有超過20年的Python使用經(jīng)驗(yàn),再加上他很強(qiáng)的寫作技能,所以值得一看。
它的翻譯版本也有很多,其中比較優(yōu)秀的版本是yidao620c翻譯的,今天查閱翻譯作者,就職華為。當(dāng)然,最重要的還是書的內(nèi)容好,這種按照一個(gè)小的話題展開討論的方式,相信很多Python愛好者都比較喜歡。
這本書的話題要想理解透,還是需要具備一定的Python基礎(chǔ),不太適合純Python小白。下面說說這本書,到底好在哪里,該怎么使用。
這是它的整體大綱目錄,一共包括十五章,分別討論:數(shù)據(jù)結(jié)構(gòu),字符串,數(shù)字,迭代器和生成器,文件與IO,函數(shù)、類、模塊,網(wǎng)絡(luò)編程,并發(fā)與測(cè)試。這些都屬于Python中最最核心的知識(shí)模塊,原書作者David個(gè)人推薦解決現(xiàn)實(shí)問題時(shí),優(yōu)先考慮Python中內(nèi)置的模塊是否能解決問題。
那么這本書到底好在哪里呢?它分話題展開討論,每個(gè)話題都足夠精簡,無廢話。最大限度的從實(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ì)上面的代碼做了簡要的分析:
我們?cè)趯懖樵冊(cè)氐拇a時(shí),通常會(huì)使用包含
yield
表達(dá)式的生成器函數(shù),也就是我們上面示例代碼中的那樣。這樣可以將搜索過程代碼和使用搜索結(jié)果代碼解耦
讓我們真正明白到底好在哪里,以及Python內(nèi)置的模塊真的很強(qiáng)大。
再比如作者在討論查找最大或最小的 N 個(gè)元素
這個(gè)話題時(shí),表面上這是一個(gè)很簡單的話題,其實(shí)如果要考慮的全面,也是需要留意一些事情的。作者分別討論了:
當(dāng)查找元素個(gè)數(shù)N = 1
時(shí),建議直接使用max
或min
方法
當(dāng)查找元素個(gè)數(shù)接近整個(gè)列表長度時(shí),建議使用sorted
函數(shù)以切片的方式獲取
當(dāng)要查找的元素個(gè)數(shù)相對(duì)比較小的時(shí)候,函數(shù) nlargest()
和 nsmallest()
是很合適的
相信大家都對(duì)前兩種情況的解決方法比較熟悉,第三種使用內(nèi)置模塊heapq
是算法中的堆結(jié)構(gòu),常見的大根堆,小根堆,
>>> 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)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!