怎麼讓你的代碼更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、 函數變類

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

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

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

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章