編寫高質量代碼 改善 Python 程序的 91 個建議

本文內容所有由 Python 編碼的最佳實踐組成,從基本原則、慣用法、語法、庫、設計模式、內部機制、開發工具和性能優化 8 個方面深刻探討了編寫高質量 Python代碼的技巧與禁忌,一共總結出 91 條寶貴的建議。每條建議對應 Python程序員可能會遇到的一個問題。

建議1:理解Pythonic概念程序員

建議2:編寫Pythonic代碼算法

建議3:理解Python與C語言的不一樣之處編程

建議4:在代碼中適當添加註釋設計模式

建議5:經過適當添加空行使代碼佈局更爲優雅、合理安全

建議6:編寫函數的4個原則性能優化

建議7:將常量集中到一個文件數據結構

建議8:利用assert語句來發現問題多線程

建議9:數據交換值的時候不推薦使用中間變量函數

建議10:充分利用Lazy evaluation的特性工具

建議11:理解枚舉替代實現的缺陷

建議12:不推薦使用type來進行類型檢查

建議13:儘可能轉換爲浮點類型後再作除法

建議14:警戒eval()的安全漏洞

建議15:使用enumerate()獲取序列迭代的索引和值

建議16:分清=與is的適用場景

建議17:考慮兼容性,儘量使用Unicode

建議18:構建合理的包層次來管理module

建議19:有節制地使用from…import語句

建議20:優先使用absolute import來導入模塊

image

建議21:i+=1 不等於 ++i

建議22:使用with自動關閉資源

建議23:使用else子句簡化循環(異常處理)

建議24:遵循異常處理的幾點基本原則

建議25:避免finally中可能發生的陷阱

建議26:深人理解None,正確判斷對象是否爲空

建議27:鏈接字符串應優先使用join而不是+

建議28:格式化字符串時儘可能使用.format方式而不是%

建議29:區別對待可變對象和不可變對象

建議30:[]、()和{}: 一致的容器初始化形式

image

建議31:記住函數傳參既不是傳值也不是傳引用

建議32:警戒默認參數潛在的問題

建議33:慎用變長參數

建議34:深刻理解str()和repr()的區別

建議35:分清staticmethod和classmethod的適用場景

建議36:掌握字符串的基本用法

建議37:按需選擇sort()或者sorted()

建議38:使用copy模塊深拷貝對象

建議39:使用Counter進行計數統計

建議40:深刻掌握ConfigParser

image

建議41:使用argparse處理命令行參數

建議42:使用pandas處理大型CSV文件

建議43:通常狀況使用ElementTree解析XML

建議44:理解模塊pickle優劣

建議45:序列化的另外一個不錯的選擇—JSON

建議46:使用traceback獲取棧信息

建議47:使用logging記錄日誌信息

建議48:使用threading模塊編寫多線程程序

建議49:使用Queue使多線程編程更安全

建議50:利用模塊實現單例模式

公衆號 逆鋒起筆專一分享 JavaPython、我的成長、職業發展乾貨,關注即送小編整理的精品編程視頻教程;天天下午 14:40 精彩推送,程序員值得關注的技術平臺。

建議51:用mixin模式讓程序更加靈活

建議52:用發佈訂閱模式實現鬆耦合

建議53:用狀態模式美化代碼

建議54:理解build-in objects

建議55:init() 不是構造方法

建議56:理解名字查找機制

建議57:爲何須要self參數

建議58:理解MRO與多繼承

建議59:理解描述符機制

建議60:區別getattr()和getattribute()方法

image

建議61:使用更爲安全的property

建議62:掌握metaclass

建議63:熟悉Python對象協議

建議64:利用操做符重載實現中綴語法

建議65:熟悉Python的迭代器協議

建議66:熟悉Python的生成器

建議67:基於生成器的協程及greenlet

建議68:理解GIL的侷限性

建議69:對象的管理與垃圾回收

建議70:從PyPI安裝包

image

建議71:使用pip和yolk安裝、管理包

建議72:作paster建立包

建議73:理解單元測試概念

建議74:爲包編寫單元測試

建議75:利用測試驅動開發提升代碼的可測性

建議76:使用Pylint檢查代碼風格

建議77:進行高效的代碼審查

建議78:將包發佈到PyPI

建議79:瞭解代碼優化的基本原則

建議80:藉助性能優化工具

image

建議81:利用cProfile定位性能瓶頸

建議82:使用memory_profiler和objgrash剖析內存使用

建議83:努力下降算法複雜度

建議84:掌握循環優化的基本技巧

建議85:使用生成器提升效率

建議86:使用不一樣的數據結構優化性能

建議87:充分利用set的優點

建議88:使用meltiprocessing克服GIL的缺陷

建議89:使用線程池提升效率

建議90:使用C/C++模塊擴展提升性能

建議91:使用Cython編寫擴展模塊

公衆號 逆鋒起筆專一分享 JavaPython、我的成長、職業發展乾貨,關注即送小編整理的精品編程視頻教程;天天下午 14:40 精彩推送,每一個程序員值得關注的技術平臺。
相關文章
相關標籤/搜索