一、為什么Python代碼要寫得美觀而明確
寫美觀和明確的代碼可以幫助更好地理解代碼的意圖和功能,使得以后的維護(hù)和更新工作變得更加容易。此外,美觀和明確的代碼也可以讓其他人更容易閱讀和理解你的代碼,這對于團(tuán)隊(duì)協(xié)作或代碼復(fù)用來說非常重要。最后,美觀和明確的代碼也可以幫助降低出錯(cuò)的概率,因?yàn)榫帉懸鬃x的代碼可以使你更容易發(fā)現(xiàn)錯(cuò)誤或潛在的問題。
所以,不僅僅是python,其他語言也是一樣。這是一個(gè)態(tài)度,也是一個(gè)提高自己的方法,是一個(gè)循序漸進(jìn)的而過程。
核心準(zhǔn)則
縮進(jìn)
優(yōu)選使用4個(gè)空格。
目前幾乎所有的IDE都是默認(rèn)tab轉(zhuǎn)為4個(gè)空格,沒有大問題。
行的最大長度
79個(gè)字符。
曾經(jīng)筆者認(rèn)為這是個(gè)“過時(shí)”的建議,目前做開發(fā)基本都是大屏幕,寫代碼全屏的時(shí)候編輯器足以容納120字符一行或者更長。但是如果要在web上比較兩次提交的代碼差異,顯然是會導(dǎo)致代碼換行,或者如果左右滑動(dòng),增加了比較的難度,在多年實(shí)踐之后(2016-2020),所以目前還是使用建議的最大行長度。
導(dǎo)入
導(dǎo)入位于文件頂部,在文件注釋之后。 導(dǎo)入通常是單獨(dú)一行。
# Correct:
import os
import sys
# Wrong:
import sys, os
或者這樣也是可以的:
# Correct:
from subprocess import Popen, PIPE
導(dǎo)入應(yīng)該按照以下順序分組:
標(biāo)準(zhǔn)庫導(dǎo)入相關(guān)的第三方導(dǎo)入特定的本地應(yīng)用/庫導(dǎo)入 在每個(gè)導(dǎo)入組之間放一行空行。 推薦絕對導(dǎo)入,因?yàn)樗鼈兏鬃x;處理復(fù)雜包布局時(shí)明確的相對導(dǎo)入可以用來替代絕對導(dǎo)入,因絕對導(dǎo)入過于冗長。此外,根據(jù)實(shí)踐經(jīng)驗(yàn),建議移除所有不必要的imports。
其他如有細(xì)節(jié)問題,查看文檔
導(dǎo)入這部分,通過Python庫isort可以完美解決(vscode默認(rèn)使用isort),在vscode中isort的默認(rèn)參數(shù)便完全符合上面的編碼規(guī)范,這里介紹筆者一些個(gè)人的風(fēng)格設(shè)置,通過設(shè)置isort的參數(shù)可以實(shí)現(xiàn):
當(dāng)from .. import …超過行長度限制時(shí),重新起一行:–sl/–force-single-line-imports強(qiáng)制通過包名排序:–fss/–force-sort-within-sections并可設(shè)置為保存時(shí)自動(dòng)排序imports,在vscode中配置為:
{
??? “editor.codeActionsOnSave”: {
??????? “source.organizeImports”: true
??? },
??? “python.sortImports.args”: [
??????? “–force-sort-within-sections”,
??????? “–force-single-line-imports”
??? ],
}
4 注釋
切忌注釋和代碼不一致!!,這比沒有注釋更讓人抓狂。 主要遵守以下要點(diǎn):
修改代碼時(shí),優(yōu)先修改注釋;注釋應(yīng)該是完整的句子。所以名列前茅個(gè)單詞首字母必須大寫,除非是名列前茅個(gè)單詞是小寫字母開頭的標(biāo)識符;短注釋可以不加句號結(jié)尾,完整句子的注釋必須要句號結(jié)尾;注釋每行以一個(gè)#加一個(gè)空格開頭;塊注釋需要使用相同級別的縮進(jìn);行內(nèi)注釋則必須用至少兩個(gè)空格和代碼隔開;盡量讓你的代碼“會說話”,不寫不必要的注釋。文檔字符串(a.k.a. “docstrings”)
為所有公共模塊,函數(shù),類和方法書寫文檔字符串。細(xì)節(jié)可以查看PEP 257。
對于docstrings,CLion有很好的支持,vscode可以通過插件實(shí)現(xiàn)Python Docstring Generator:
插件管理器搜索Python Docstring Generator安裝即可使用方法很簡單,在函數(shù)名后換行快捷鍵Ctrl+Shift+2即可,或者輸入”””敲換行時(shí)也會自動(dòng)添加該插件默認(rèn)使用的風(fēng)格是Google,通過對比一些開源算法庫的文檔,使用Google風(fēng)格的比如TensorFlow,PyTorch,其文檔的可讀性并不如使用numpy風(fēng)格的NumPy和SciPy,因此建議使用numpy風(fēng)格。
延伸閱讀:
二、python的可擴(kuò)展性
可擴(kuò)展性是屬于 Python 的其他特性之一。在必要時(shí),可以用其他語言編寫 Python 代碼的一部分,例如 C++。因此,Python 是一種可擴(kuò)展的語言,這意味著它可以被擴(kuò)展到其他語言。Python 可擴(kuò)展的特性是指 Python 的部分代碼可以用 C 或 C++ 來編寫。這并不能增強(qiáng)語言 (語法、結(jié)構(gòu)等等),但是它可以讓你把 Python 和其他語言開發(fā)的庫連接起來。這就是說,你可以將以其他語言編寫的代碼包含在你的 Python 源代碼中。