<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python 進階必讀書,附 PDF 翻譯版下載

          共 2078字,需瀏覽 5分鐘

           ·

          2020-12-08 23:17

          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時,建議直接使用maxmin方法

          • 當查找元素個數(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

          當然,也可以直接使用nsmallest獲取前幾個最小值。

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

          如果你對解壓可迭代對象賦值給多個變量還不是太了解,建議下載這本電子書抽空學習一下。這本書的電子版也是目前最好的yidao620c.

          下載方式如下,關注Python小例子并回復pycook

          Python小例子,長按關注

          瀏覽 77
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码高清久久久久久 | 日韩欧美一级在线视频 | 色撸撸日一日 | 青草偷拍视频 | 中文字幕三级片 |