蛙蛙推薦 如何編寫高質量的python程式

2022-08-02 11:27:06 字數 2710 閱讀 7822

原文:

**規範

空白專案模版

單元測試

文件打包

小結首先閱讀下面的兩份規範,並深入理解。

寫出規範的**是寫出高質量**的第一步,並且有助於培養仔細的習慣。

為了培養規範寫**的習慣,可以安裝flake8這個工具,它不僅可以檢查**風格是否符合官方建議(pep8),而且還能找出潛在的隱患(用pyflakes做語法分析),更逆天的是還能檢測到你有些函式寫的太複雜(**圈複雜度)了,更更逆天的是可以設定git commit之前必須通過這些檢查。

當然具體操作需要根據自己的專案進行一些定製,比如可以忽略e501,w293。

好的開始是成功的一半,寫python**就從pyempty開始吧。

在github上看一下那些經典的專案,web.py,flask,

pep8,他們的專案目錄都很規範,綜合借鑑了一些專案的特點,我寫了這個pyempty專案。

readme.md這裡寫你專案的簡介,quick start等資訊,雖然distutils要求這個檔案沒有字尾名,但github上如果字尾是.md的話可以直接轉換成html顯示。

changelog.txt該檔案存放程式各版本的變更資訊,也有一定的格式,參考web.py的changelog.txt

licenes.txt這裡存放你專案使用的協議,不要編寫自己的協議。

requirements.txt如果你的專案需要依賴其它的python第三方庫,在這裡一行乙個寫出來,可能pip install的時候能自動幫你安裝

setup.py安裝指令碼,後面詳細介紹

docs裡面存放你的專案文件,如概要設計,詳細設計,維護文件,pydoc自動生成的文件等,強烈推薦大家使用markdown格式編寫文件

src這個目錄裡存放專案模組的主要**,盡量不要把模組目錄直接放到根目錄,模組**目錄可以在setup.py裡指定的

tests這個目錄存放所有單元測試,效能測試指令碼,單元測試的檔案確保以test_做字首,這樣distutils會自動打包這些檔案,並且用python -m unittest discover -s ./ -p 'test_*.py' -v可以直接執行這些測試

martin fowler:"在你不知道如何測試**之前,就不該編寫程式。而一旦你完成了程式,測試**也應該完成。除非測試成功,你不能認為你編寫出了可以工作的程式。"
我們有很多理由不寫單元測試,歸根結底是懶,雖然**大全上說:

大部分研究都發現,檢測比測試的成本更小。nasa軟體工程實驗室的一項研究發現,閱讀**每小時能夠檢測出來的缺陷要比測試高出80%左右(basili and selby 1987)。後來,ibm的一項研究又發現,檢查發現的乙個錯誤只需要3.5個工作時,而測試則需要花費15-25個工作時(kaplan 1995)。
但是單元測試還是讓別人相信你的**有很高質量的最有力證據。

好了,請詳細閱讀:

深入python3.0: 單元測試-2.x也適用

unit testing framework

不完整中文版

敏捷開發不是提倡什麼文件也不寫,沒有文件就沒有傳承和積累,輪崗或新人接手任務就會遇到很大的麻煩,所以我決定每個專案最少要寫以下文件:

nalysis.model.md概要設計文件,不同於readme.md檔案,該文件應該寫於專案開發之前,把專案有哪些功能,大概分幾個模組等專案整體概述資訊寫一下。

design.model.md詳細設計文件,不用太詳細,至少把專案依賴哪些東西,誰依賴這個專案,重要演算法流程描述,**整體結構等寫出來。

maintain.md維護文件,這個我覺得最重要,你的服務都記錄哪些日誌,需要監控哪些業務指標,如何重啟,有哪些配置項等,沒這些東西,你的專案很難運維。

上面這些文件都是專案全域性性的文件,不適合寫在docstring或注視裡,所以要有單獨的文件。

python有專門的模組打包系統distutils,你可以用這套機制把你的**打包並分發到pypi上,這樣任何人都可以用pip或easy_install安裝你的模組。

如果你開發的是內部專案,還可以用mypypi架設私有的pypi,然後把專案的大的版本更新發布到內部的pypi上,配置管理人員和運維人員可以很方便的從pypi上拉取**安裝到測試環境或生產環境。

發布大版本的時候要給版本命名及編寫changelist,可以參考git pro的相關章節,主要記住以下幾個命令。

git tag -a v0.1 -m 'my test tag'  #給大版本命名,打tag

git shortlog --no-merges master --not v0.1 #生成版本演示文稿,changelist

python有自己的打包機制,所以一般不要用git archive命令。

當然大版本管理用pypi管理比較合適,小的bug fix,緊急上線等好多公司都是用git直接從生產環境拉**更新,因為git,svn等可以很方便的撤銷某次更新,回滾到某個位置。

python 打包指南

深入python3.0:打包 python 類庫

python打包:分發指定檔案

蛙蛙推薦 如何編寫高質量的python程式

規範 空白專案模版 單元測試 文件打包 小結首先閱讀下面的兩份規範,並深入理解。寫出規範的 是寫出高質量 的第一步,並且有助於培養仔細的習慣。為了培養規範寫 的習慣,可以安裝flake8這個工具,它不僅可以檢查 風格是否符合官方建議 pep8 而且還能找出潛在的隱患 用pyflakes做語法分析 更...

編寫高質量的CSS

我們應用css的能力應該分成兩部分 一部分是css的api,重點是如何用css控制頁面內元素的樣式 另一部分是css框架,重點是如何對css進行組織。base層 reset功能 通用類 common層 元件級別的css類 page層 頁面級別css樣式 舉個例子,有兩個列表,列表條目1字型14px紅...

如何編寫高質量的程式 常量

常量是一種識別符號,它的值在執行期間恆定不變。合理使用常量,對提高程式的可移植性 可讀性和準確性都有著很重要的意義。那麼定義常量有哪些方法?在類中定義常量的實質是什麼?常量和列舉的實質區別在 本文就要回答這個問題。1 為什麼需要常量 如果不使用常量,直接在程式中填寫數字或字串,將會有什麼麻煩?1 程...