當前位置:
首頁 > 最新 > 怎麼讓代碼更Pythonic?光有技巧可不行,你還需要看這些

怎麼讓代碼更Pythonic?光有技巧可不行,你還需要看這些

寫代碼如同寫文章,好的文章是反覆修改出來的,代碼也同樣是反覆的重構出來的。今天給大家分享下,怎麼從一個編程學習者變為一個程序猿(程序媛)!起碼不要讓別人一看你的代碼就知道你是個小菜鳥!

我們通常寫一個代碼,必然會經過一個簡單-難-簡潔的過程,那麼在重構的過程中需要注意哪些呢?

1、代碼可以正常運行

首先必然要保證,代碼可以正常運行!

不論你是直接按邏輯寫下來還是函數式編程,必須先能實現你的代碼功能,可以正常運行起來

2、精簡代碼,提高可讀性

當你的代碼可以運行起來以後,接著就要重新讀一遍代碼,以下幾個方面是需要優化的地方:

· 你的代碼是否遵循了pep8原則,比如命名,每一行代碼長度等等,這些細節要處理好

· 函數的重構,返回值、預設值等等,要保持函數式功能單一原則

· 有沒有過多的if else嵌套,是否可以提取

· 全局變數有沒有大寫,有沒有寫到開頭

3、代碼注釋完整

代碼初步精簡過後或者過程中,順手將注釋寫一下是一個很好的習慣

代碼是要先給人看,然後才會給機器運行!所以注釋是一個非常重要的東西,有的同學不是很喜歡寫注釋,覺得很麻煩,那麼如果這個代碼很短,那麼確實可以不寫,但是如果你的代碼很長,成百上千行,不寫注釋會讓你很懵逼!

4、異常處理齊全,代碼很健壯

代碼有時效性!尤其在爬蟲上更是深有體會,現在可以正常運行的代碼,過段時間可能因為網頁改版,或者cookie、sql語句等等的變動,都可能會導致你的代碼報錯,我們要提前將這些問題考慮進去,這就需要異常處理機制了,注意以下幾點:

· 如果是爬蟲,是否需要寫上cookie的相關函數,如果需要ip代理,是否考慮了代理ip的時效性

· 循環遍歷的時候是否有考慮錯誤,比如獲取了空列表

· If分支是否考慮齊全,有沒有else的情況

· 文件讀寫是否有try語句,是否考慮存儲位置的問題

· 拿到一個句柄,比如SSH,SQL,這樣有沒有考慮到句柄的有效性

代碼所有的異常可能都需要考慮,以此來保證代碼的健壯!

5、配置文件

我們在剛才寫好了全局變數,現在可以將這些全局變數放入一個配置文件中,來實現和介面分離,降低耦合度。對於用戶來說只要改配置文件就行了。比如可以把整個的全局變數放到一個config.py裡面,然後在主程序裡面用from config import * 這樣的話,對後續的修改方便很多。

如果可以,寫一個Redeme文檔,將你的代碼中用到環境、版本、配置配置文件等等信息都寫入裡面,對人對己都是很方便的!

6、各個單元功能完善,測試各種分支迴路

程序雖然寫好了,不管你的程序是幾十行的小程序小腳本,還是幾千上萬行的項目,測試用例是一定要設計。

簡單的程序可以設一些斷言assert,看一些有無異常,對於複雜的邏輯,一定要針對性的設計多個分支迴路反覆測一下代碼。

7、添加日誌功能

有同學說上面6步之後,我感覺代碼已經很不錯了,這麼還有優化!Python的代碼很多都是在服務區上運行的,你總不能一直都是print吧,尤其是對大型的程序,沒有日誌怎麼行,建議用logging模塊進行日誌的記錄

8、性能優化

結構優化和線程、進程、協程、分散式等等提前設計好

如果你處理的任務僅僅是幾百上千,對性能要求不高,對實時性要求也不高那還好。如果你要處理幾十萬條數據呢!這個時候一定要考慮並發的處理,到底是用多進程,還是多線程,線程池,還是用協程,需要思考!

當然性能上的優化並不單是單線程變多線程,還有數據結構的優化,比如什麼時候該用列表,什麼時候用元組,哪一種對內存消耗少,查詢快。

9、函數變類

為了讓我們的代碼更加易於擴展,適應變化!我們需要用類把變數和函數進行封裝,設計一些介面,那些是對外開發的,那些是對外封閉的。

哪些用靜態函數包裹,哪些用實例方法。是不是需要用一些裝飾器來簡化代碼。

相同類別的函數,進行整合,合併要一個類裡面。

多個功能用多個類來表示,方便維護和擴展。

類與類之間,考慮他們的內在關係。用組合還是繼承,用一些簡單的設計模式,根據程序的特性用比如工廠模式,觀察者。

以上是一些個人建議,希望能幫助到大家,關注公眾號號,私信獲取更多內容!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

世界盃:用Python分析熱門奪冠球隊
從零開始學Python AI開發系列02

TAG:Python |