注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計算機/網(wǎng)絡(luò)軟件與程序設(shè)計Effective Python:編寫高質(zhì)量Python代碼的90個有效方法(原書第2版)

Effective Python:編寫高質(zhì)量Python代碼的90個有效方法(原書第2版)

Effective Python:編寫高質(zhì)量Python代碼的90個有效方法(原書第2版)

定 價:¥129.00

作 者: [美] 布雷特·斯特拉金(Brett Slatkin) 著,愛飛翔 譯
出版社: 機械工業(yè)出版社
叢編項: Effective系列叢書
標(biāo) 簽: 暫缺

ISBN: 9787111674023 出版時間: 2021-02-01 包裝: 平裝
開本: 16開 頁數(shù): 370 字?jǐn)?shù):  

內(nèi)容簡介

  本書能夠幫你掌握真正的 Pythonic 編程方式,充分發(fā)揮 Python 的優(yōu)勢,寫出健壯而高效的代碼。Scott Meyers在其名著Effective C++中開創(chuàng)了一種用簡明的場景實例來講述編程經(jīng)驗的方式,本書作者Brett Slatkin也沿用這種方式,向大家講解 Python 的編程原則、開發(fā)技巧與便捷方案,形成 90 條建議并配有實用的范例代碼,以便大家能夠扎實地掌握 Python 語言?!颈緯年P(guān)鍵內(nèi)容包括】: ● 31 條新的實用建議,這些建議涵蓋 Python 開發(fā)的幾個主要方面。 ● 對各種語句、表達式與內(nèi)置類型做了詳細(xì)講解與演示。 ● 怎樣寫出意圖清晰、便于復(fù)用而且不容易出現(xiàn) bug 的函數(shù)。 ● 怎樣更好地使用推導(dǎo)機制與生成器函數(shù)。 ● 怎樣用類與接口準(zhǔn)確展示相關(guān)的行為。 ● 怎樣避開元類與動態(tài)屬性中的一些陷阱。 ● 怎樣用更高效且更清晰的方法寫出并發(fā)與并行程序。 ● 怎樣優(yōu)化程序性能并提升代碼質(zhì)量。 ● 用于改進調(diào)試與測試工作的技術(shù)與內(nèi)置模塊。 ● 與協(xié)作開發(fā)有關(guān)的工具和經(jīng)驗。

作者簡介

  Brett Slatkin是Google首席軟件工程師,他是Google Surveys的聯(lián)合技術(shù)創(chuàng)始人,也是PubSubHubbub協(xié)議的共同創(chuàng)造者之一。此外,Slatkin還發(fā)布了Google的第一個云計算產(chǎn)品——App Engine。早在15年前,Slatkin就開始在工作中使用Python管理Google大量的服務(wù)器群。他擁有紐約哥倫比亞大學(xué)計算機工程專業(yè)學(xué)士學(xué)位。

圖書目錄


●第1章 培養(yǎng)Pythonic思維 // 1
第1條 查詢自己使用的Python版本 // 1
第2條 遵循PEP 8風(fēng)格指南 // 2
第3條 了解bytes與str的區(qū)別 // 5
第4條 用支持插值的f-string取代C風(fēng)格的格式字符串與str.format方法 // 9
第5條 用輔助函數(shù)取代復(fù)雜的表達式 // 19
第6條 把數(shù)據(jù)結(jié)構(gòu)直接拆分到多個變量里,不要專門通過下標(biāo)訪問 // 21
第7條 盡量用enumerate取代range // 25
第8條 用zip函數(shù)同時遍歷兩個迭代器 // 26
第9條 不要在for與while循環(huán)后面寫else塊 // 28
第10條 用賦值表達式減少重復(fù)代碼 // 31

●第2章 列表與字典 // 37
第11條 學(xué)會對序列做切片 // 37
第12條 不要在切片里同時指定起止下標(biāo)與步進 // 40
第13條 通過帶星號的unpacking操作來捕獲多個元素,不要用切片 // 42
第14條 用sort方法的key參數(shù)來表示復(fù)雜的排序邏輯 // 45
第15條 不要過分依賴給字典添加條目時所用的順序 // 51
第16條 用get處理鍵不在字典中的情況,不要使用in與KeyError // 56
第17條 用defaultdict處理內(nèi)部狀態(tài)中缺失的元素,而不要用setdefault // 61
第18條 學(xué)會利用__missing__構(gòu)造依賴鍵的默認(rèn)值 // 63

●第3章 函數(shù) // 66
第19條 不要把函數(shù)返回的多個數(shù)值拆分到三個以上的變量中 // 66
第20條 遇到意外狀況時應(yīng)該拋出異常,不要返回None // 69
第21條 了解如何在閉包里面使用外圍作用域中的變量 // 71
第22條 用數(shù)量可變的位置參數(shù)給函數(shù)設(shè)計清晰的參數(shù)列表 // 75
第23條 用關(guān)鍵字參數(shù)來表示可選的行為 // 77
第24條 用None和docstring來描述默認(rèn)值會變的參數(shù) // 80
第25條 用只能以關(guān)鍵字指定和只能按位置傳入的參數(shù)來設(shè)計清晰的參數(shù)列表 // 83
第26條 用functools.wraps定義函數(shù)修飾器 // 88

●第4章 推導(dǎo)與生成 // 91
第27條 用列表推導(dǎo)取代map與filter // 91
第28條 控制推導(dǎo)邏輯的子表達式不要超過兩個 // 93
第29條 用賦值表達式消除推導(dǎo)中的重復(fù)代碼 // 94
第30條 不要讓函數(shù)直接返回列表,應(yīng)該讓它逐個生成列表里的值 // 97
第31條 謹(jǐn)慎地迭代函數(shù)所收到的參數(shù) // 100
第32條 考慮用生成器表達式改寫數(shù)據(jù)量較大的列表推導(dǎo) // 104
第33條 通過yield from把多個生成器連起來用 // 106
第34條 不要用send給生成器注入數(shù)據(jù) // 108
第35條 不要通過throw變換生成器的狀態(tài) // 113
第36條 考慮用itertools拼裝迭代器與生成器 // 117

●第5章 類與接口 // 122
第37條 用組合起來的類來實現(xiàn)多層結(jié)構(gòu),不要用嵌套的內(nèi)置類型 // 122
第38條 讓簡單的接口接受函數(shù),而不是類的實例 // 128
第39條 通過@classmethod多態(tài)來構(gòu)造同一體系中的各類對象 // 131
第40條 通過super初始化超類 // 136
第41條 考慮用mix-in類來表示可組合的功能 // 140
第42條 優(yōu)先考慮用public屬性表示應(yīng)受保護的數(shù)據(jù),不要用private屬性表示 // 144
第43條 自定義的容器類型應(yīng)該從collections.abc繼承 // 149

●第6章 元類與屬性 // 153
第44條 用純屬性與修飾器取代舊式的setter與getter方法 // 153
第45條 考慮用@property實現(xiàn)新的屬性訪問邏輯,不要急著重構(gòu)原有的代碼 // 157
第46條 用描述符來改寫需要復(fù)用的@property方法 // 160
第47條 針對惰性屬性使用__getattr__、__getattribute__及__setattr__ // 165
第48條 用__init_subclass__驗證子類寫得是否正確 // 170
第49條 用__init_subclass__記錄現(xiàn)有的子類 // 177
第50條 用__set_name__給類屬性加注解 // 181
第51條 優(yōu)先考慮通過類修飾器來提供可組合的擴充功能,不要使用元類 // 185

●第7章 并發(fā)與并行 // 191
第52條 用subprocess管理子進程 // 192
第53條 可以用線程執(zhí)行阻塞式I/O,但不要用它做并行計算 // 195
第54條 利用Lock防止多個線程爭用同一份數(shù)據(jù) // 199
第55條 用Queue來協(xié)調(diào)各線程之間的工作進度 // 202
第56條 學(xué)會判斷什么場合必須做并發(fā) // 210
第57條 不要在每次fan-out時都新建一批Thread實例 // 214
第58條 學(xué)會正確地重構(gòu)代碼,以便用Queue做并發(fā) // 218
第59條 如果必須用線程做并發(fā),那就考慮通過ThreadPoolExecutor實現(xiàn) // 224
第60條 用協(xié)程實現(xiàn)高并發(fā)的I/O // 226
第61條 學(xué)會用asyncio改寫那些通過線程實現(xiàn)的I/O // 230
第62條 結(jié)合線程與協(xié)程,將代碼順利遷移到asyncio // 239
第63條 讓asyncio的事件循環(huán)保持暢通,以便進一步提升程序的響應(yīng)能力 // 245
第64條 考慮用concurrent.futures實現(xiàn)真正的并行計算 // 248

●第8章 穩(wěn)定與性能 // 253
第65條 合理利用try/except/else/finally結(jié)構(gòu)中的每個代碼塊 // 253
第66條 考慮用contextlib和with語句來改寫可復(fù)用的try/finally代碼 // 258
第67條 用datetime模塊處理本地時間,不要用time模塊 // 262
第68條 用copyreg實現(xiàn)可靠的pickle操作 // 265
第69條 在需要準(zhǔn)確計算的場合,用decimal表示相應(yīng)的數(shù)值 // 272
第70條 先分析性能,然后再優(yōu)化 // 274
第71條 優(yōu)先考慮用deque實現(xiàn)生產(chǎn)者-消費者隊列 // 278
第72條 考慮用bisect搜索已排序的序列 // 284
第73條 學(xué)會使用heapq制作優(yōu)先級隊列 // 286
第74條 考慮用memoryview與bytearray來實現(xiàn)無須拷貝的bytes操作 // 294

●第9章 測試與調(diào)試 // 300
第75條 通過repr字符串輸出調(diào)試信息 // 301
第76條 在TestCase子類里驗證相關(guān)的行為 // 304
第77條 把測試前、后的準(zhǔn)備與清理邏輯寫在setUp、tearDown、setUpModule與tearDownModule中,以防用例之間互相干擾 // 309
第78條 用Mock來模擬受測代碼所依賴的復(fù)雜函數(shù) // 312
第79條 把受測代碼所依賴的系統(tǒng)封裝起來,以便于模擬和測試 // 319
第80條 考慮用pdb做交互調(diào)試 // 322
第81條 用tracemalloc來掌握內(nèi)存的使用與泄漏情況 // 326

●第10章 協(xié)作開發(fā) // 329
第82條 學(xué)會尋找由其他Python開發(fā)者所構(gòu)建的模塊 // 329
第83條 用虛擬環(huán)境隔離項目,并重建依賴關(guān)系 // 330
第84條 每一個函數(shù)、類與模塊都要寫docstring // 335
第85條 用包來安排模塊,以提供穩(wěn)固的API // 339
第86條 考慮用模塊級別的代碼配置不同的部署環(huán)境 // 344
第87條 為自編的模塊定義根異常,讓調(diào)用者能夠?qū)iT處理與此API有關(guān)的異?!?/ 346
第88條 用適當(dāng)?shù)姆绞酱蚱蒲h(huán)依賴關(guān)系 // 350
第89條 重構(gòu)時考慮通過warnings提醒開發(fā)者API已經(jīng)發(fā)生變化 // 355
第90條 考慮通過typing做靜態(tài)分析,以消除bug // 361

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號