如何避免把 Python 代码写得跟屎一样?
同樣的功能,你可以使用不同的代碼方式來實現(xiàn),它們,都可以跑的起來,而在背后的那些「跳動」著的代碼,有的美如詩,有的丑如屎...如果說,代碼是有生命的,那么你希望它是溫柔的天仙,還是摳腳的大漢?
你在 Python 環(huán)境中, import 一下 this,浮現(xiàn)出來的是一首詩,前部分是:
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
你看這 Python 的思想,要的就是簡潔,漂亮,可讀性好...
為了讓你團隊之間合作得愉快,為了讓你我心情好一點,為了你的幸福,我想還是有必要跟你說說:
如何避免把 Python 代碼寫得跟屎一樣。。。
那么接下來就是
學習 Python 的正確姿勢
關(guān)于名稱
在寫代碼的時候,我們有很多地方需要定義名稱,比如常用到就有變量的名稱,類的名稱,方法的名稱,參數(shù)的名稱等等...如何才能寫好它們呢?
類名
有一種命名法叫「大駝峰式命名法」:
每一個單字的首字母都采用大寫字母,例如:FirstName、LastName、CamelCase,也被稱為Pascal命名法(英語:Pascal Case)。
在 Python 中起類名最好就是使用這種方式,比如:MyClass,FxxkPython。
還有一點要注意的是,有些單詞本身就是縮寫的,比如:
HTML = HyperText Markup Language
HTTP = HyperText Transfer Protocol
那么在寫含有這些單詞的類名時,也是需要大寫的:
HTTPServerError
而不是:
HttpServerError
方法名和變量名
方法名和變量名盡量全使用小寫字母,如果名稱中的單詞多,可以使用「_」來分割,比如:
firstname,lastname,extract_data,file,age,name....
模塊名稱
模塊名稱也是全使用小寫字母,使用「_」來分割,比如:
fxxk.py,fxxk_python.py
包名
包名使用小寫字母,但不建議使用「_」來分割,比如:
package,mypackage
常量
常量名稱使用全大寫字母,使用「_」來分割,比如:
MAXNUM,MYCONSTANT,CONSTANT
關(guān)于注釋
在 Python 代碼中寫注釋有幾種,比如在代碼塊注釋,在行內(nèi)注釋,寫文檔的注釋。
幾個寫注釋的好習慣:
代碼注釋使用 # 開頭,并在后面空一格才開始寫
每一行不要超過 72 個字符,適當使用 # 分行
注釋要和代碼對齊
每一段應該空一行出來
行內(nèi)注釋
注意空格:
代碼塊多行注釋
注意對齊:
注意換行:
文檔字符串
除了解釋代碼的行為,我們有時候還需要寫代碼的「功能使用文檔」,有了文檔別人才能更好的使用你寫的功能,通常我們會在代碼里面寫 DocStrings。
寫 DocStrings 的習慣方式是這樣的:
Docstrings 應該是在「類」或「函數(shù)定義下」的第一行開始聲明
Docstrings 應該是用 """ 開頭, """ 結(jié)尾
Docstrings 第一行的描述盡量簡短并且能讓人一下子就知道說的是什么
第二行起需要空格
每一段描述之間需要有空格
? 和代碼對齊
? 每一行不要超過 72 個字符
像這樣:
當然,DocStrings 還有別的風格,比如常見的還有 Google 和 Numpy 的風格。
你可以在這里找到它們的例子:
https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_numpy.html#example-numpy
關(guān)于代碼
其實寫代碼和寫文章有點相似,文章要讓人看得下去,起碼要有點排版,什么地方應該加空格,什么地方應該換行,字與字之間的間距多少才好?行與行之間的間距多少才好?什么地方留白?(你看我公眾號的排版,是不是用心了?)
代碼也是一樣的,不要什么都特么堆在一起。
類與類之間要空兩行
類與頂層方法之間也要空兩行
類中的方法之間要空一行
不同的邏輯代碼之間空一行
比如 for,if 這些具有邏輯性的語句之間,可以空一行,這樣可以讓邏輯看起來更加清晰:
代碼的縮近
關(guān)于代碼的縮進可能大部分 b 友喜歡用 Tab 鍵,不過更好的縮進方式是「連續(xù) 4 個空格」。
在使用 Python2 那會你還可以 Tab 和空格混合使用,不過在 Python3 之后不可以這樣,縮進的方式要保持一致,最好都是「連續(xù) 4 個空格」。
如果你已經(jīng)習慣了 Tab 來縮進,也沒關(guān)系,大部分編輯器都可以自定義按 Tab 的時候,給你轉(zhuǎn)換成「連續(xù) 4 個空格」。
代碼的換行
在寫代碼的時候,要記得換行,每行代碼最好不要超過 79 個字符。
對于一些字典,列表,元組,函數(shù)等這些含有 () [] {},可以直接回車換行,并垂直對齊:
有時候為了美觀大方,你可以把括號的結(jié)尾另起一行:?
如果含有運算符,建議換行的時候把符號放在前面:
其它的你可以使用反斜杠換行:
代碼的空格
在以下這些運算操作符的兩邊,需要加個空格。
運算:
+?_?*?=?+=?-=?等
比較:
==,?<,?>,?!=,?<>,?<=,?>=,?in,?not in,?is,?is not
布爾:?
and,?or,?not
不過,如果代碼中含有多個運算,那么可以直接在最低優(yōu)先級的地方添加空格:
對于函數(shù)的參數(shù)默認賦值,也不需要添加空格:
在冒號,分號,逗號后面加空格,前面不要加空格(切片中的冒號除外):
緊靠 ()、[]、{} 不要加空格 :
在函數(shù)調(diào)用和索引使用時不要加空格:
關(guān)于 import
在文件的頂部,我們寫 import 的語句,具有如下順序:
從標準內(nèi)置庫開始導入,接著是第三方庫,最后導入的是自己本地寫的庫,并且分好組,之間空一行。
import 語句要換行,不要寫在一行上:
但是從一個庫中導入具體的類,就可以在寫在一行上:
OK,以上就是小帥b今天給你帶來的分享,我想這些都是你會經(jīng)常操作到的東西,如果你想要了解更多如何把 Python 寫的優(yōu)雅,可以看看官網(wǎng)的 PEP8 介紹。
當然,也有一些插件可以使用,它們可以格式化你的代碼,比如 vim-autopep8,或者一些庫也可以檢查你的代碼是否符合規(guī)范,比如 pylint,pycodestyle 等,不過小帥b還是建議你自己在寫代碼的時候多養(yǎng)成以上這些好習慣,而不是靠插件來幫你格式化那些 shit。
也許有些人并不在意這些,覺得可讀性沒什么,那就讓他們隨意就好。不過你都看到這里了,說明你還是對某方面有細節(jié)上的追求,那么咱們就一點一點改進唄,對你總會有好處的。
之前在某個群上,有位不認識的朋友看到了我的代碼,他夸我的那句話我到現(xiàn)在還記得:「你的代碼看起來好舒服啊」,這「舒服」兩個字就像你給我點贊分享那樣開心。。。我之所以開心且記得,是因為他看到了我注重的細節(jié)。
說不定哪天,因為某個細節(jié),你就脫「引」而出,那可真是帥啊!
推薦閱讀
Pandas處理數(shù)據(jù)太慢,來試試Polars吧!
懶人必備!只需一行代碼,就能導入所有的Python庫
絕!關(guān)于pip的15個使用小技巧
介紹10個常用的Python內(nèi)置函數(shù),99.99%的人都在用!
可能是全網(wǎng)最完整的 Python 操作 Excel庫總結(jié)!
總結(jié)
以上是生活随笔為你收集整理的如何避免把 Python 代码写得跟屎一样?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pandas直接读取arff格式的文件,
- 下一篇: 一个已经存在 10 年,却被严重低估的库