寫代碼如同寫文章,好的文章是反覆修改出來的,代碼也一樣是反覆的重構出來的。今天給你們分享下,怎麼從一個編程學習者變爲一個程序猿(程序媛)!起碼不要讓別人一看你的代碼就知道你是個小菜鳥!sql
咱們一般寫一個代碼,必然會通過一個簡單-難-簡潔的過程,那麼在重構的過程當中須要注意哪些呢?編程
一、 代碼能夠正常運行小程序
首先必然要保證,代碼能夠正常運行!設計模式
不論你是直接按邏輯寫下來仍是函數式編程,必須先能實現你的代碼功能,能夠正常運行起來性能優化
二、 精簡代碼,提升可讀性cookie
當你的代碼能夠運行起來之後,接着就要從新讀一遍代碼,如下幾個方面是須要優化的地方:數據結構
三、 代碼註釋完整多線程
代碼初步精簡事後或者過程當中,順手將註釋寫一下是一個很好的習慣併發
代碼是要先給人看,而後纔會給機器運行!因此註釋是一個很是重要的東西,有的同窗不是很喜歡寫註釋,以爲很麻煩,那麼若是這個代碼很短,那麼確實能夠不寫,可是若是你的代碼很長,成百上千行,不寫註釋會讓你很懵逼!分佈式
四、 異常處理齊全,代碼很健壯
代碼有時效性!尤爲在爬蟲上更是深有體會,如今能夠正常運行的代碼,過段時間可能由於網頁改版,或者cookie、sql語句等等的變更,均可能會致使你的代碼報錯,咱們要提早將這些問題考慮進去,這就須要異常處理機制了,注意如下幾點:
代碼全部的異常可能都須要考慮,以此來保證代碼的健壯!
五、 配置文件
咱們在剛纔寫好了全局變量,如今能夠將這些全局變量放入一個配置文件中,來實現和接口分離,下降耦合度。對於用戶來講只要改配置文件就好了。好比能夠把整個的全局變量放到一個config.py裏面,而後在主程序裏面用from config import * 這樣的話,對後續的修改方便不少。
若是能夠,寫一個Redeme文檔,將你的代碼中用到環境、版本、配置配置文件等等信息都寫入裏面,對人對己都是很方便的!
六、 各個單元功能完善,測試各類分支迴路
程序雖然寫好了,無論你的程序是幾十行的小程序小腳本,仍是幾千上萬行的項目,測試用例是必定要設計。
簡單的程序能夠設一些斷言assert,看一些有無異常,對於複雜的邏輯,必定要針對性的設計多個分支迴路反覆測一下代碼。
七、 添加日誌功能
有同窗說上面6步以後,我感受代碼已經很不錯了,這麼還有優化!Python的代碼不少都是在服務區上運行的,你總不能一直都是print吧,尤爲是對大型的程序,沒有日誌怎麼行,建議用logging模塊進行日誌的記錄
八、 性能優化
結構優化和線程、進程、協程、分佈式等等提早設計好
若是你處理的任務僅僅是幾百上千,對性能要求不高,對實時性要求也不高那還好。若是你要處理幾十萬條數據呢!這個時候必定要考慮併發的處理,究竟是用多進程,仍是多線程,線程池,仍是用協程,須要思考!
固然性能上的優化並不單是單線程變多線程,還有數據結構的優化,好比何時該用列表,何時用元組,哪種對內存消耗少,查詢快。
九、 函數變類
爲了讓咱們的代碼更加易於擴展,適應變化!咱們須要用類把變量和函數進行封裝,設計一些接口,那些是對外開發的,那些是對外封閉的。
哪些用靜態函數包裹,哪些用實例方法。是否是須要用一些裝飾器來簡化代碼。
相同類別的函數,進行整合,合併要一個類裏面。
多個功能用多個類來表示,方便維護和擴展。
類與類之間,考慮他們的內在關係。用組合仍是繼承,用一些簡單的設計模式,根據程序的特性用好比工廠模式,觀察者。