Python 代碼風(fēng)格指南—簡(jiǎn)化版

camera-classic-coffee-407294.jpg

通常代碼不單單是寫給自己看的。

當(dāng)代碼出現(xiàn)bug而你又想不通哪有問(wèn)題時(shí),就需要把代碼貼到論壇或請(qǐng)身邊的人審閱。

或者你在公司上班,代碼需要交給上級(jí)審閱。

或者是你完成了某個(gè)項(xiàng)目,然后分享了你的結(jié)果,共享了你的代碼。

又或者你在Github上發(fā)起了一個(gè)開(kāi)源項(xiàng)目。

這些都需要?jiǎng)e人閱讀你的代碼,如果你的代碼格式混亂,別人就會(huì)失去耐心。這也就加大了你們之間的溝通成本。

所以有必要了解一些基礎(chǔ)的代碼風(fēng)格或習(xí)慣。

作為官方的Python 代碼風(fēng)格指南,必然要寫的詳細(xì),因?yàn)樾枰紤]所有的情形。但對(duì)于編程新手而言,閱讀完整份文檔確實(shí)有些劃不來(lái),因?yàn)椴恍枰鎸?duì)這么多情況。所以我總結(jié)了一份縮簡(jiǎn)版,記錄了最基礎(chǔ)的代碼風(fēng)格。

雖然是這里說(shuō)得是Python 代碼風(fēng)格,但實(shí)際上絕大多數(shù)內(nèi)容同樣適用于其它編程軟件。

作為編程新手,最需掌握的是四項(xiàng)內(nèi)容:命名,空格/空行,縮進(jìn), 注釋。

一、命名


  1. 變量名不要過(guò)于簡(jiǎn)單,盡量用能表達(dá)其含義的英文字母來(lái)表達(dá)。
Yes: num_student = len(student) 
No: n = len(student)
  1. 不要使用小寫l(對(duì)應(yīng)大寫L)、大寫O和大寫I(對(duì)應(yīng)小寫i),因?yàn)樗鼈兒苋菀谆煜?/li>
  2. 類名需要首字母大寫
  3. 函數(shù)名小寫字母,并且各字母之間用_分隔
  4. 常量用大寫字母

二、空格/空行


通常賦值符或運(yùn)算符兩邊需要加上空格,x = a + b 要比 x=a+b 更加整潔。

不使用空格的情況

  1. 行末尾
    行末尾的空格既沒(méi)有價(jià)值,又可能會(huì)造在bug。

  2. 逗號(hào)與括號(hào)之間

Yes: foo = (0,)
No:  bar = (0, )
  1. 緊跟著變量
Yes: if x == 4: print x, y; x, y = y, x
No:  if x == 4 : print x , y ; x , y = y , x
  1. 與冒號(hào)有關(guān)時(shí)
Yes:
ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:]
ham[lower:upper], ham[lower:upper:], ham[lower::step]
ham[lower+offset : upper+offset]
ham[: upper_fn(x) : step_fn(x)], ham[:: step_fn(x)]
ham[lower + offset : upper + offset]

No:
ham[lower + offset:upper + offset]
ham[1: 9], ham[1 :9], ham[1:9 :3]
ham[lower : : upper]
ham[ : upper]

其它提醒

  1. 如果一個(gè)表達(dá)示中有多級(jí)運(yùn)算,可以在優(yōu)先級(jí)低的運(yùn)算符周邊使用空格,但最多使用一個(gè)空格:
Yes:
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)

No:
x = x * 2 - 1
hypot2 = x * x + y * y
c = (a + b) * (a - b)
  1. 對(duì)于函數(shù)參數(shù)中的賦值符,不需要使用空格:
Yes:

def complex(real, imag=0.0):
    return magic(r=real, i=imag)
No:

def complex(real, imag = 0.0):
    return magic(r = real, i = imag)
  1. 二元運(yùn)算符應(yīng)該在第二個(gè)值之前
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)
  1. 空行
    函數(shù)與函數(shù)之間需要二個(gè)空行分隔。
    函數(shù)之間的邏輯塊用空行來(lái)分隔,這樣可以更清楚地看清哪部分是相互關(guān)聯(lián)的。

三、縮進(jìn)


space VS tab

空格與制表符就是一對(duì)冤家,美劇《硅谷》中也特地用了幾個(gè)場(chǎng)景來(lái)描述它們對(duì)現(xiàn)實(shí)生活產(chǎn)生的麻煩。

指南中建議使用空格,而且每一級(jí)縮進(jìn)用四個(gè)空格。但我還是習(xí)慣用制表符,因?yàn)榘匆幌驴偙劝此南驴?。?dāng)然,制表符在不同的環(huán)境下可能會(huì)表示不同數(shù)量的空格,所以復(fù)制別人的代碼時(shí)可能會(huì)造成格式不一致。我想這也是指南中建議用空格的原因。

縮進(jìn)的數(shù)量

  1. 延長(zhǎng)部份需要對(duì)齊,比如
foo = long_function_name(var_one, var_two,
                         var_three, var_four)
  1. 為了方便閱讀,分隔不同意義的語(yǔ)句,使用不同的層級(jí),比如:
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)

而不是:

def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)

四、注釋


注釋是為了讓人更快的理解函數(shù),如果你的注釋會(huì)造成誤解,還不如不寫注釋。所以當(dāng)你為一個(gè)函數(shù)寫了注釋,并且更改了函數(shù)代碼時(shí),必需要及時(shí)更新你的注釋。

注釋盡量用英文。

注釋總是要以#和空格開(kāi)始。

注釋塊:

注釋塊是對(duì)接下來(lái)的邏輯代碼塊進(jìn)行注釋。

注釋塊需要與解釋的代碼對(duì)齊,并且注釋塊中的段落用空行分隔。

注釋行

在 stetement 后的注釋稱為注釋行或行注釋。

注釋行與前面的 statement 至少空兩格。

文檔注釋:

文檔注釋是對(duì)函數(shù)的說(shuō)明,需要在 def 下一行就給出。使用三個(gè)引號(hào),并且最后的引號(hào)要單獨(dú)一行,比如:

"""Return a foobang

Optional plotz says to frobnicate the bizbaz first.
"""

五、其它


行長(zhǎng)

行長(zhǎng)控制在79字符之內(nèi)。

import

在文件開(kāi)頭就引入所有需要的庫(kù),并且每行只引入一個(gè)庫(kù)。引入順序?yàn)椋?/p>

  1. 標(biāo)準(zhǔn)庫(kù)
  2. 第三方庫(kù)
  3. 自己寫的類/庫(kù)

這三為類引入之間還需要空行分隔。

編程建議

  1. 如果需要表達(dá)if x is not None 就用if x即可。

  2. 用到try except 語(yǔ)句時(shí)

Yes:
try:
    value = collection[key]
except KeyError:
    return key_not_found(key)
else:
    return handle_value(value)

No:
try:
    # Too broad!
    return handle_value(collection[key])
except KeyError:
    # Will also catch KeyError raised by handle_value()
    return key_not_found(key)
  1. return
    函數(shù)中的return statement 要保持一致,不要為了簡(jiǎn)便而省略return None
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 更新時(shí)間:2016/5/13 介紹 本文檔所提供的編碼規(guī)范,適用于主要的Python發(fā)行版中組成標(biāo)準(zhǔn)庫(kù)的Pytho...
    超net閱讀 5,994評(píng)論 0 15
  • 一個(gè)統(tǒng)一的編程風(fēng)格不但能夠增強(qiáng)代碼可讀性,也可以避免許多低級(jí)問(wèn)題。一個(gè)嚴(yán)格遵從編碼規(guī)范的團(tuán)隊(duì),代碼無(wú)論出自多少人之...
    七弦桐語(yǔ)閱讀 690評(píng)論 0 2
  • Python是一種對(duì)代碼風(fēng)格很重視的語(yǔ)言,從縮進(jìn)就能看出這一點(diǎn),Python強(qiáng)調(diào)易于理解。最近在負(fù)責(zé)代碼重構(gòu)的工作...
    知曰閱讀 11,357評(píng)論 1 85
  • 原文: https://github.com/ecomfe/spec/blob/master/javascript...
    zock閱讀 3,488評(píng)論 2 36
  • 粉絲原本是追星族的代名詞,這些人可以不辭辛勞,驅(qū)車百里甚至是千里去參加某個(gè)明星的演唱會(huì),會(huì)花大量的資金去購(gòu)買他們已...
    殘劍閱讀 518評(píng)論 0 1

友情鏈接更多精彩內(nèi)容