1. 程式人生 > >Fluent Python讀後感

Fluent Python讀後感

2017.10.7
斷斷續續地, 花了應該有個把月讀完Fluent Python. 當然, 並非真正讀完. Chapter 16 coroutine, Chapter 17, 18 Concurrency with futures/asyncio 這三章沒來得及讀. 原因是讀到這幾章時國慶假期已經快結束了. 相比於這三章, 後面的章節更有吸引力, 所以跳過. 跳過就跳過吧.

讀書的過程中作了不少筆記. 一開始寫筆記沒怎麼考慮可讀性, 因為我想著這是給自己看的. 可後來感覺不對. 一是可讀性差了, 會影響自己再讀的慾望. 二是, 更重要的是, 在寫筆記的過程中若注重可讀性, 自己會思考地更深入淺出, 全面條理, 也就是說思考加工的更多更深了, 既可加深即時的理解, 也有助於長期的記憶. 既然如此, 何樂而不為. 好了, 閒話不多說了, 回到Fluent Python上來.

總體評價是通俗易懂,系統全面, 深入淺出. 我讀的是英文原版而非翻譯版, 原因不是因為個人覺得自己英語有多好, 而是翻譯版實在是讀得不順. 一開始的三章讀的就是翻譯版, 覺得翻譯得不錯. 但讀到第四章: 文字和位元組序列時懵了. 因為遇到了以下兩個名詞: 碼位, 位元組表述. 每個字都認識, 可組合成詞後, 實在是無法理解它們的涵意. 好吧, 說不定這是什麼要介紹的新概念. 可讀了好幾個section都沒get到它的意思. 頓時不淡定了. 於是又上網搜到本書的英文原版. 原來碼位是code point, the identity of a character, 位元組表述是byte representation

. 好吧. 真的不怪譯者. 有些概念在中文裡沒有原生詞彙, 只能自己發揮. 之後的內容就都是讀的英文原版的了. 從語言上講, 寫的真心不錯. 嗯, 從內容上講也很好. 對我而言, 本書的廣度和深度都是夠的, 大大拓寬和加深了我對Python的理解.

接下來是讀完這本書後最深的幾點感想. 在使用Python之前, 本人用得最多的是Java, 所以在學習Python的過程中會經常性地把Python與Java的某些語言特性對比一番. 接下的描述依舊會如此.

  • Python中的協議. 協議就是介面. Java裡實現一個協議就要implements/extends一個介面/抽象類. implements/extends
    一個介面/抽象類就要implements它的所有方法. 但是有些方法確實用不著, 於是空著吧. 既佔地又難看. 而Python裡實現一個協議只需要實現對應的方法, 並且還不需要全部實現, 只要保證將用得著的給實現好就能用. 方便的很.
  • Python中的函式也是物件, 函式與類之間沒有絕對的界限. Python的OOP, 比Java走得更遠.
  • Python中的訪問控制機制. Python給我的第一印象是: Python沒有像Java那樣嚴格的訪問控制機制. 訪問與否, 是否修改, 大部分情況下全憑約定和自覺. 但Python其實是提供了descriptor協議用於控制屬性訪問的. 而且, 用descriptor將class的屬性暴露成介面, 不需要像Java一樣寫很多冗長的getter/setter, 更為簡潔.
  • safety與security. Python支援對class與instance的各種動態操作(Monkey patching), 也不支援完備的訪問控制機制, 可以防止無意間的錯誤呼叫, 卻不能防止有意的惡意呼叫. 初看之下, 這一點不如Java. 可是Java提供的控制限制機制就是保證絕對安全嗎? Absolutely NOT. 在Java中若要一定要訪問private屬性, 也是可以做到的. 所以, 無論是Java還是Python, 在設計時都只做到了為safety考慮, 但都不能保證security.
  • Python裡, 特定地操作會觸發特定的特殊方法的呼叫. 例如, len–>__len__, []–>__getitem__, for ... in –> __iter__, 等等. 易用性靈活性都非常高.

好了, 差不多就先這樣吧.