Effective Python:編寫高質量 Python 代碼的 90個有效方法, 2/e Effective Python: 90 Specific Ways to Write Better Python, 2/e

Brett Slatkin 譯 愛飛翔

商品描述

本書能夠幫你掌握真正的Pythonic 編程方式,充分發揮Python 的優勢,寫出健壯而高效的代碼。
Scott Meyers在其名著Effective C++中開創了一種用簡明的場景實例來講述編程經驗的方式,本書作者Brett Slatkin也沿用這種方式,
向大家講解Python 的編程原則、開發技巧與便捷方案,形成90 條建議並配有實用的範例代碼,以便大家能夠紮實地掌握Python 語言。

【本書的關鍵內容包括】:
● 31 條新的實用建議,這些建議涵蓋Python 開發的幾個主要方面。
● 對各種語句、表達式與內置類型做了詳細講解與演示。
● 怎樣寫出意圖清晰、便於復用而且不容易出現bug 的函數。
● 怎樣更好地使用推導機制與生成器函數。
● 怎樣用類與接口準確展示相關的行為。
● 怎樣避開元類與動態屬性中的一些陷阱。
● 怎樣用更高效且更清晰的方法寫出並發與並行程序。
● 怎樣優化程序性能並提升代碼質量。
● 用於改進調試與測試工作的技術與內置模塊。
● 與協作開發有關的工具和經驗。

【本書代碼獲取方式】
1、關注“華章計算機”
2、回复“67402”獲取全書代碼下載地址
 

作者簡介

Brett Slatkin

是Google首席軟件工程師,他是Google Surveys的聯合技術創始人,也是PubSubHubbub協議的共同創造者之一。
此外,Slatkin還發布了Google的第一個雲計算產品——App Engine。
早在15年前,Slatkin就開始在工作中使用Python管理Google大量的服務器群。
他擁有紐約哥倫比亞大學計算機工程專業學士學位。

目錄大綱

目錄
本書讚譽
譯者序
前言
致謝
第1章培養Pythonic思維
第1條查詢自己使用的Python版本
第2條遵循PEP 8風格指南
第3條了解bytes與str的區別
第4條用支持插值的f-string取代C風格的格式字符串與str.format方法
第5條用輔助函數取代複雜的表達式
第6條把數據結構直接拆分到多個變量裡,不要專門通過下標訪問
第7條盡量用enumerate取代range
第8條用zip函數同時遍歷兩個迭代器
第9條不要在for與while循環後面寫else塊
第10條用賦值表達式減少重複代碼
第2章列表與字典
第11條學會對序列做切片
第12條不要在切片裡同時指定起止下標與步進
第13條通過帶星號的unpacking操作來捕獲多個元素,不要用切片
第14條用sort方法的key參數來表示複雜的排序邏輯
第15條不要過分依賴給字典添加條目時所用的順序
第16條用get處理鍵不在字典中的情況,不要使用in與KeyError
第17條用defaultdict處理內部狀態中缺失的元素,而不要用setdefault
第18條學會利用__missing__構造依賴鍵的默認值
第3章函數
第19條不要把函數返回的多個數值拆分到三個以上的變量中
第20條遇到意外狀況時應該拋出異常,不要返回None
第21條了解如何在閉包裡面使用外圍作用域中的變量
第22條用數量可變的位置參數給函數設計清晰的參數列表
第23條用關鍵字參數來表示可選的行為
第24條用None和docstring來描述默認值會變的參數
第25條用只能以關鍵字指定和只能按位置傳入的參數來設計清晰的參數列表
第26條用functools.wraps定義函數修飾器
第4章推導與生成
第27條用列表推導取代map與filter
第28條控制推導邏輯的子表達式不要超過兩個
第29條用賦值表達式消除推導中的重複代碼
第30條不要讓函數直接返回列表,應該讓它逐個生成列表裡的值
第31條謹慎地迭代函數所收到的參數
第32條考慮用生成器表達式改寫數據量較大的列表推導
第33條通過yield from把多個生成器連起來用
第34條不要用send給生成器注入數據
第35條不要通過throw變換生成器的狀態
第36條考慮用itertools拼裝迭代器與生成器
第5章類與接口
第37條用組合起來的類來實現多層結構,不要用嵌套的內置類型
第38條讓簡單的接口接受函數,而不是類的實例
第39條通過@classmethod多態來構造同一體系中的各類對象
第40條通過super初始化超類
第41條考慮用mix-in類來表示可組合的功能
第42條優先考慮用public屬性表示應受保護的數據,不要用private屬性表示
第43條自定義的容器類型應該從collections.abc繼承
第6章元類與屬性
第44條用純屬性與修飾器取代舊式的setter與getter方法
第45條考慮用@property實現新的屬性訪問邏輯,不要急著重構原有的代碼
第46條用描述符來改寫需要復用的@property方法
第47條針對惰性屬性使用__getattr__、__getattribute__及__setattr
第48條用__init_subclass__驗證子類寫得是否正確
第49條用__init_subclass__記錄現有的子類
第50條用__set_name__給類屬性加註解
第51條優先考慮通過類修飾器來提供可組合的擴充功能,不要使用元類
第7章並發與並行
第52條用subprocess管理子進程
第53條可以用線程執行阻塞式I/O,但不要用它做並行計算
第54條利用Lock防止多個線程爭用同一份數據
第55條用Queue來協調各線程之間的工作進度
第56條學會判斷什麼場合必須做並發
第57條不要在每次fan-out時都新建一批Thread實例
第58條學會正確地重構代碼,以便用Queue做並發
第59條如果必須用線程做並發,那就考慮通過ThreadPoolExecutor實現
第60條用協程實現高並發的I/O
第61條學會用asyncio改寫那些通過線程實現的I/O
第62條結合線程與協程,將代碼順利遷移到asyncio
第63條讓asyncio的事件循環保持暢通,以便進一步提升程序的響應能力
第64條考慮用concurrent.futures實現真正的並行計算
第8章穩定與性能
第65條合理利用try/except/else/finally結構中的每個代碼塊
第66條考慮用contextlib和with語句來改寫可複用的try/finally代碼
第67條用datetime模塊處理本地時間,不要用time模塊
第68條用copyreg實現可靠的pickle操作
第69條在需要準確計算的場合,用decimal表示相應的數值
第70條先分析性能,然後再優化
第71條優先考慮用deque實現生產者-消費者隊列
第72條考慮用bisect搜索已排序的序列
第73條學會使用heapq製作優先級隊列
第74條考慮用memoryview與bytearray來實現無須拷貝的bytes操作
第9章測試與調試
第75條通過repr字符串輸出調試信息
第76條在TestCase子類裡驗證相關的行為
第77條把測試前、後的準備與清理邏輯寫在setUp