編寫高質量代碼:改善Python程序的91個建議 ( 簡體 字) |
作者:張穎 賴勇浩 著 | 類別:1. -> 程式設計 -> Python |
譯者: |
出版社:機械工業出版社 | 3dWoo書號: 38764 詢問書籍請說出此書號!【缺書】 NT售價: 295 元 |
出版日:6/1/2014 |
頁數:262 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787111467045 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:寫這本書
當這本書的寫作接近尾聲的時候,回過頭來看看這一年多的寫作歷程,不由得心生感嘆,這是一個痛并快樂著的過程。不必說犧牲了多少個周末,也不必計算多少個夜晚伏案寫作,單是克服寫作過程中因疲勞而迸發出來的彷徨、猶豫和動搖等情緒都覺得是件不容易的事情。但不管怎么說,這最終是個沉淀和收獲的過程,寫作的同時我也和讀者們一樣在進步。為什么要寫這本書?可以說是機緣巧合。機械工業出版社的楊福川老師聯系到我,說他們打算策劃一本關于高質量Python編程方面的書籍,問我有沒有興趣加入。實話實說,最開始我是持否定態度的,一則因為業余時間實在有限,無法保證我“工作和生活要平衡”的理念;二則覺得自己水平有限,在學習Python的道路上我和千千萬萬讀者一樣,只是一個普通的“朝圣者”,我也有迷惑不解的時候,在沒有修煉到大徹大悟之前拿什么來給人傳道授業?是賴勇浩老師的加入給我注入了一針強心劑,他豐富的Python項目經驗以及長期活躍于Python社區所積累下來的名望無形中給了我一份信心。楊老師的鼓勵和支持也更加堅定了我的態度,經過反復考慮和調整自己的心態,最終我決定和賴老師一起完成這本書。因為我也經歷過從零開始的Python學習過程,我也遇到過各種困惑,經歷過不同的曲折,這些可能也正是每一個學習Python的人從最初到進階這一過程中都會遇到的問題。抱著分享自己在學習和工作中所積累的一點微薄經驗的心態,我開始了本書的寫作之旅。這個過程也被我當作是對自己學過的知識的一種梳理。如果與此同時,還能夠給讀者帶來一些啟示和思索,那將是這本書所能帶給我的最大收獲了。
讀者對象
有一定的Python基礎,希望通過項目最佳實踐來提升自己的相關Python人員。
希望進一步掌握Python相關內部機制的技術人員。
希望寫出更高質量、更Pythonic代碼的編程人員。
開設相關課程的大專院校師生。
如何閱讀本書
首先需要注意的是,本書并不是入門級的語法介紹類的書籍,因此在閱讀本書之前假定你已經掌握了最基礎的Python語法。如果沒有,也沒有關系,你可以先找一本最簡單的介紹Python語法的書籍看看,嘗試寫幾個Python小程序之后再來閱讀本書。
本書分為8章,主要從編程慣用法、基礎語法、庫、設計模式、內部機制、開發工具、性能剖析與優化等方面解讀如何編寫高質量的Python程序。每個章節的內容都以建議的形式呈現,這些建議或源于實際項目應用經驗,或源于對Python本質的理解和探討,或源于社區推薦的做法。它們能夠幫助讀者快速完成從入門到進階的這個過程。
由于各個章節相對獨立,因此無須花費整段的時間從頭開始閱讀。你可以在空閑的時候選取任意感興趣的小節閱讀。為了減輕讀者負擔,本書代碼盡量保持完整,閱讀過程中無須額外下載其他相關代碼。
勘誤和支持
由于作者的水平有限,加之編寫時間倉促,書中難免會出現一些錯誤或者不準確的地方,懇請讀者批評指正。如果你在閱讀過程中遇到任何問題或者發現任何錯誤,歡迎發送郵件至郵箱highqualitypython@163com,我們會盡量一一解答直到你滿意。期待能夠得到你的真摯反饋。
致謝
首先要感謝機械工業出版社華章公司的楊福川老師,因為有了你的鼓勵才使我有勇氣開始這本書。還要感謝機械工業出版社的孫海亮編輯,在這一年多的時間中始終支持我的寫作,是你的鼓勵和幫助引導我順利完成全部書稿。當然也要感謝我的搭檔賴老師,和你合作是一件非常愉快的事情,也讓我收獲頗多。
其次要感謝我的家人,是你們的寬容、支持和理解給了我完成本書的動力,也是你們無微不至的照顧讓我不必為生活中的瑣事煩心,從而能全身心地投入到寫作中去。
最后,我想提前感謝一下本書的讀者,謝謝你們能夠選擇閱讀這本書,這將是作為作者的我們最大的榮幸。
謹以此書獻給所有熱愛Python的朋友們!
張 穎 |
內容簡介:thon因為具有簡單易學、開發效率高、跨平臺、面向對象、可擴展、可嵌入、類庫豐富等特性,所以被廣泛應用于數據處理、游戲邏輯編程、科學計算、系統運維、可編程控制(人工智能)和信息安全等多個領域,是當下最受歡迎的編程語言之一。作為一位Python程序員,如何才能編寫出健壯、優雅、高質量的代碼?這是很多Python程序員都感興趣和都在探索的問題。本書嘗試著從如下8個方面總結了編寫高質量Python代碼所需掌握的知識、經驗和技巧。 容易被忽視的重要概念和常識,如代碼的布局和編寫函數的原則等; 編寫Python程序慣用的方法,如利用assert語句去發現問題、使用enumerate()獲取序列迭代的索引和值等; 語法中的關鍵條款,如有節制地使用from...import語句、異常處理的幾點基本原則等; 常見庫的使用,如按需選擇sort()或者sorted()、使用Queue使多線程編程更安全等; Python設計模式的使用,如用發布訂閱模式實現松耦合、用狀態模式美化代碼等; Python的內部機制,如名字查找機制、描述符機制等; 開發工具的使用,如pip等各種開發工具的使用、各種代碼測試用具的使用等; Python代碼的性能優化分析,優化的原則、工具、技巧,以及常見性能問題的解決等。 |
目錄:前 言
第1章 引論 1
建議1:理解Pythonic概念 1
建議2:編寫Pythonic代碼 5
建議3:理解Python與C語言的不同之處 8
建議4:在代碼中適當添加注釋 10
建議5:通過適當添加空行使代碼布局更為優雅、合理 12
建議6:編寫函數的4個原則 15
建議7:將常量集中到一個文件 18
第2章 編程慣用法 20
建議8:利用assert語句來發現問題 20
建議9:數據交換值的時候不推薦使用中間變量 22
建議10:充分利用Lazy evaluation的特性 24
建議11:理解枚舉替代實現的缺陷 25
建議12:不推薦使用type來進行類型檢查 27
建議13:盡量轉換為浮點類型后再做除法 29
建議14:警惕eval()的安全漏洞 31
建議15:使用enumerate()獲取序列迭代的索引和值 33
建議16:分清==與is的適用場景 35
建議17:考慮兼容性,盡可能使用Unicode 37
建議18:構建合理的包層次來管理module 42
第3章 基礎語法 45
建議19:有節制地使用from...import語句 45
建議20:優先使用absolute import來導入模塊 48
建議21:i+=1不等于++i 50
建議22:使用with自動關閉資源 50
建議23:使用else子句簡化循環(異常處理) 53
建議24:遵循異常處理的幾點基本原則 55
建議25:避免finally中可能發生的陷阱 59
建議26:深入理解None,正確判斷對象是否為空 60
建議27:連接字符串應優先使用join而不是+ 62
建議28:格式化字符串時盡量使用.format方式而不是% 64
建議29:區別對待可變對象和不可變對象 68
建議30:[]、()和{}:一致的容器初始化形式 71
建議31:記住函數傳參既不是傳值也不是傳引用 73
建議32:警惕默認參數潛在的問題 77
建議33:慎用變長參數 78
建議34:深入理解str()和repr()的區別 80
建議35:分清staticmethod和classmethod的適用場景 82
第4章 庫 86
建議36:掌握字符串的基本用法 86
建議37:按需選擇sort()或者sorted() 89
建議38:使用copy模塊深拷貝對象 92
建議39:使用Counter進行計數統計 95
建議40:深入掌握ConfigParser 97
建議41:使用argparse處理命令行參數 99
建議42:使用pandas處理大型CSV文件 103
建議43:一般情況使用ElementTree解析XML 107
建議44:理解模塊pickle優劣 111
建議45:序列化的另一個不錯的選擇——JSON 113
建議46:使用traceback獲取棧信息 116
建議47:使用logging記錄日志信息 119
建議48:使用threading模塊編寫多線程程序 122
建議49:使用Queue使多線程編程更安全 125
第5章 設計模式 129
建議50:利用模塊實現單例模式 129
建議51:用mixin模式讓程序更加靈活 132
建議52:用發布訂閱模式實現松耦合 134
建議53:用狀態模式美化代碼 137
第6章 內部機制 141
建議54:理解built-in objects 141
建議55:__init__()不是構造方法 143
建議56:理解名字查找機制 147
建議57:為什么需要self參數 151
建議58:理解MRO與多繼承 154
建議59:理解描述符機制 157
建議60:區別__getattr__()和__getattribute__()方法 160
建議61:使用更為安全的property 164
建議62:掌握metaclass 169
建議63:熟悉Python對象協議 176
建議64:利用操作符重載實現中綴語法 179
建議65:熟悉 Python 的迭代器協議 181
建議66:熟悉 Python 的生成器 185
建議67:基于生成器的協程及greenlet 188
建議68:理解GIL的局限性 192
建議69:對象的管理與垃圾回收 194
第7章 使用工具輔助項目開發 197
建議70:從PyPI安裝包 197
建議71:使用pip和yolk安裝、管理包 199
建議72:做paster創建包 202
建議73:理解單元測試概念 209
建議74:為包編寫單元測試 212
建議75:利用測試驅動開發提高代碼的可測性 216
建議76:使用Pylint檢查代碼風格 218
建議77:進行高效的代碼審查 221
建議78:將包發布到PyPI 224
第8章 性能剖析與優化 227
建議79:了解代碼優化的基本原則 227
建議80:借助性能優化工具 228
建議81:利用cProfile定位性能瓶頸 229
建議82:使用memory_profiler 和 objgraph 剖析內存使用 235
建議83:努力降低算法復雜度 237
建議84:掌握循環優化的基本技巧 238
建議85:使用生成器提高效率 240
建議86:使用不同的數據結構優化性能 243
建議87:充分利用set的優勢 245
建議88:使用multiprocessing克服GIL的缺陷 248
建議89:使用線程池提高效率 254
建議90:使用C/C++模塊擴展提高性能 257
建議91:使用 Cython 編寫擴展模塊 259 |
序: |