《Effective Python:編寫高質量Python代碼的90個有效方法(原書第2版)由機械工業出版社出版,是一本適合Python進階者閱讀的圖書。第二版根據Python3重寫代碼,新增31條高效方法。
基本介紹
- 書名:Effective Python:編寫高質量Python代碼的90個有效方法(原書第2版)
- 作者:[美] 布雷特·斯特拉金(Brett Slatkin)
- 類別:程式設計
- 原作品:Effective Python, Second Edition
- 譯者:愛飛翔
- 出版社:機械工業出版社
- 出版時間:2020年2月
- 頁數:370 頁
- 定價:129 元
- 開本:16 開
- 裝幀:平裝
- ISBN:9787111674023
內容簡介,圖書目錄,作者簡介,
本書可以幫你掌握真正的 Pythonic 編程方式,令你能夠完全發揮出 Python 語言的強大功能,並寫出健壯而高效的代碼。Scott Meyers 在暢銷書《Effective C++》中開創了一種以使用場景為主導的精練教學方式,本書作者 Brett Slatkin 就以這種方式匯聚了 90 條實踐原則、開發技巧和便捷方案,並以實用的代碼範例來解釋它們。
Slatkin 根據自己在 Google 公司多年開發 Python 基礎架構所積累的經驗,揭示 Python 語言中一些鮮為人知的微妙特性,並給出了能夠改善代碼功能及運行效率的習慣用法。通過本書,你能夠了解到解決關鍵編程任務所用的奇妙方式,並學會編寫易於理解、便於維護且利於改進的代碼。
本書讚譽
譯者序
前言
致謝
第1章 培養Pythonic思維 // 1
第1條 查詢自己使用的Python版本 // 1
第2條 遵循PEP 8風格指南 // 2
第3條 了解bytes與str的區別 // 5
第4條 用支持插值的f-string取代C風格的格式字元串與str.format方法 // 9
第5條 用輔助函式取代複雜的表達式 // 19
第6條 把數據結構直接拆分到多個變數里,不要專門通過下標訪問 // 21
第7條 儘量用enumerate取代range // 25
第8條 用zip函式同時遍歷兩個疊代器 // 26
第9條 不要在for與while循環後面寫else塊 // 28
第10條 用賦值表達式減少重複代碼 // 31
第2章 列表與字典 // 37
第11條 學會對序列做切片 // 37
第12條 不要在切片裡同時指定起止下標與步進 // 40
第13條 通過帶星號的unpacking操作來捕獲多個元素,不要用切片 // 42
第14條 用sort方法的key參數來表示複雜的排序邏輯 // 45
第15條 不要過分依賴給字典添加條目時所用的順序 // 51
第16條 用get處理鍵不在字典中的情況,不要使用in與KeyError // 56
第17條 用defaultdict處理內部狀態中缺失的元素,而不要用setdefault // 61
第18條 學會利用__missing__構造依賴鍵的默認值 // 63
第3章 函式 // 66
第19條 不要把函式返回的多個數值拆分到三個以上的變數中 // 66
第20條 遇到意外狀況時應該拋出異常,不要返回None // 69
第21條 了解如何在閉包裡面使用外圍作用域中的變數 // 71
第22條 用數量可變的位置參數給函式設計清晰的參數列表 // 75
第23條 用關鍵字參數來表示可選的行為 // 77
第24條 用None和docstring來描述默認值會變的參數 // 80
第25條 用只能以關鍵字指定和只能按位置傳入的參數來設計清晰的參數列表 // 83
第26條 用functools.wraps定義函式修飾器 // 88
第4章 推導與生成 // 91
第27條 用列表推導取代map與filter // 91
第28條 控制推導邏輯的子表達式不要超過兩個 // 93
第29條 用賦值表達式消除推導中的重複代碼 // 94
第30條 不要讓函式直接返回列表,應該讓它逐個生成列表里的值 // 97
第31條 謹慎地疊代函式所收到的參數 // 100
第32條 考慮用生成器表達式改寫數據量較大的列表推導 // 104
第33條 通過yield from把多個生成器連起來用 // 106
第34條 不要用send給生成器注入數據 // 108
第35條 不要通過throw變換生成器的狀態 // 113
第36條 考慮用itertools拼裝疊代器與生成器 // 117
第5章 類與接口 // 122
第37條 用組合起來的類來實現多層結構,不要用嵌套的內置類型 // 122
第38條 讓簡單的接口接受函式,而不是類的實例 // 128
第39條 通過@classmethod多態來構造同一體系中的各類對象 // 131
第40條 通過super初始化超類 // 136
第41條 考慮用mix-in類來表示可組合的功能 // 140
第42條 優先考慮用public屬性表示應受保護的數據,不要用private屬性表示 // 144
第43條 自定義的容器類型應該從collections.abc繼承 // 149
第6章 元類與屬性 // 153
第44條 用純屬性與修飾器取代舊式的setter與getter方法 // 153
第45條 考慮用@property實現新的屬性訪問邏輯,不要急著重構原有的代碼 // 157
第46條 用描述符來改寫需要復用的@property方法 // 160
第47條 針對惰性屬性使用__getattr__、__getattribute__及__setattr__ // 165
第48條 用__init_subclass__驗證子類寫得是否正確 // 170
第49條 用__init_subclass__記錄現有的子類 // 177
第50條 用__set_name__給類屬性加註解 // 181
第51條 優先考慮通過類修飾器來提供可組合的擴充功能,不要使用元類 // 185
第7章 並發與並行 // 191
第52條 用subprocess管理子進程 // 192
第53條 可以用執行緒執行阻塞式I/O,但不要用它做並行計算 // 195
第54條 利用Lock防止多個執行緒爭用同一份數據 // 199
第55條 用Queue來協調各執行緒之間的工作進度 // 202
第56條 學會判斷什麼場合必須做並發 // 210
第57條 不要在每次fan-out時都新建一批Thread實例 // 214
第58條 學會正確地重構代碼,以便用Queue做並發 // 218
第59條 如果必須用執行緒做並發,那就考慮通過ThreadPoolExecutor實現 // 224
第60條 用協程實現高並發的I/O // 226
第61條 學會用asyncio改寫那些通過執行緒實現的I/O // 230
第62條 結合執行緒與協程,將代碼順利遷移到asyncio // 239
第63條 讓asyncio的事件循環保持暢通,以便進一步提升程式的回響能力 // 245
第64條 考慮用concurrent.futures實現真正的並行計算 // 248
第8章 穩定與性能 // 253
第65條 合理利用try/except/else/finally結構中的每個代碼塊 // 253
第66條 考慮用contextlib和with語句來改寫可復用的try/finally代碼 // 258
第67條 用datetime模組處理本地時間,不要用time模組 // 262
第68條 用copyreg實現可靠的pickle操作 // 265
第69條 在需要準確計算的場合,用decimal表示相應的數值 // 272
第70條 先分析性能,然後再最佳化 // 274
第71條 優先考慮用deque實現生產者-消費者佇列 // 278
第72條 考慮用bisect搜尋已排序的序列 // 284
第73條 學會使用heapq製作優先權佇列 // 286
第74條 考慮用memoryview與bytearray來實現無須拷貝的bytes操作 // 294
第9章 測試與調試 // 300
第75條 通過repr字元串輸出調試信息 // 301
第76條 在TestCase子類里驗證相關的行為 // 304
第77條 把測試前、後的準備與清理邏輯寫在setUp、tearDown、setUpModule與tearDownModule中,以防用例之間互相干擾 // 309
第78條 用Mock來模擬受測代碼所依賴的複雜函式 // 312
第79條 把受測代碼所依賴的系統封裝起來,以便於模擬和測試 // 319
第80條 考慮用pdb做互動調試 // 322
第81條 用tracemalloc來掌握記憶體的使用與泄漏情況 // 326
第10章 協作開發 // 329
第82條 學會尋找由其他Python開發者所構建的模組 // 329
第83條 用虛擬環境隔離項目,並重建依賴關係 // 330
第84條 每一個函式、類與模組都要寫docstring // 335
第85條 用包來安排模組,以提供穩固的API // 339
第86條 考慮用模組級別的代碼配置不同的部署環境 // 344
第87條 為自編的模組定義根異常,讓調用者能夠專門處理與此API有關的異常 // 346
第88條 用適當的方式打破循環依賴關係 // 350
第89條 重構時考慮通過warnings提醒開發者API已經發生變化 // 355
第90條 考慮通過typing做靜態分析,以消除bug // 361
作者簡介
Brett Slatkin是Google首席軟體工程師,他是Google Surveys的聯合技術創始人,也是PubSubHubbub協定的共同創造者之一。此外,Slatkin還發布了Google的第一個雲計算產品——App Engine。早在15年前,Slatkin就開始在工作中使用Python管理Google大量的伺服器群。他擁有紐約哥倫比亞大學計算機工程專業學士學位。