电竞比分网-中国电竞赛事及体育赛事平台

分享

如何寫(xiě)出清晰又優(yōu)雅的Python代碼?我們給你這26條建議

 長(zhǎng)沙7喜 2021-05-05
大數(shù)據(jù)DT
提供大數(shù)據(jù)、AI等領(lǐng)域干貨學(xué)習(xí)資源的「寶藏號(hào)」,跟50萬(wàn)技術(shù)人共同成長(zhǎng),一起玩轉(zhuǎn)大數(shù)據(jù)、Python、數(shù)據(jù)分析、數(shù)據(jù)科學(xué)、人工智能!還會(huì)有各種好玩又奇葩的數(shù)據(jù)解讀,邊學(xué)習(xí)邊吃瓜!
538篇原創(chuàng)內(nèi)容
公眾號(hào)

導(dǎo)讀:Python Enhancement Proposal #8叫作PEP 8,它是一份針對(duì)Python代碼格式而編訂的風(fēng)格指南。盡管只要語(yǔ)法正確,代碼隨便怎么寫(xiě)都行,但采用一致的風(fēng)格可以使代碼更易讀、更易懂。如果你的代碼風(fēng)格和其他Python程序員的相同,那么就能夠更加順利地與大家一起做項(xiàng)目。


即便你的代碼只給自己看,也應(yīng)該按照這套風(fēng)格來(lái)寫(xiě),以便以后修改更加容易一些,而且能夠避開(kāi)很多常見(jiàn)的錯(cuò)誤。

作者:布雷特·斯拉特金(Brett Slatkin)
來(lái)源:大數(shù)據(jù)DT(ID:hzdashuju)


圖片



PEP 8非常詳細(xì)地描述了如何編寫(xiě)清晰的Python代碼,而且會(huì)隨著Python語(yǔ)言的發(fā)展持續(xù)更新。大家應(yīng)該把完整指南閱讀一遍:

https://www./dev/peps/pep-0008

筆者認(rèn)為,下面這幾條規(guī)則是絕對(duì)應(yīng)該遵循的。


01 與空白有關(guān)的建議

(9條 / 26條)

在Python中,空白(whitespace)在語(yǔ)法上相當(dāng)重要。Python程序員對(duì)空白字符的用法尤其在意,因?yàn)樗鼈儠?huì)影響代碼的清晰程度。在這方面,大家應(yīng)該遵循以下幾條建議。

  1. 用空格(space)表示縮進(jìn),而不要用制表符(tab)。
  2. 和語(yǔ)法相關(guān)的每一層縮進(jìn)都用4個(gè)空格表示。
  3. 每行不超過(guò)79個(gè)字符。
  4. 對(duì)于占據(jù)多行的長(zhǎng)表達(dá)式來(lái)說(shuō),除了首行之外的其余各行都應(yīng)該在通常的縮進(jìn)級(jí)別之上再加4個(gè)空格。
  5. 在同一份文件中,函數(shù)與類(lèi)之間用兩個(gè)空行隔開(kāi)。
  6. 在同一個(gè)類(lèi)中,方法與方法之間用一個(gè)空行隔開(kāi)。
  7. 使用字典時(shí),鍵與冒號(hào)之間不加空格,寫(xiě)在同一行的冒號(hào)和值之間應(yīng)該加一個(gè)空格。
  8. 給變量賦值時(shí),賦值符號(hào)的左邊和右邊各加一個(gè)空格,并且只加一個(gè)空格就好。
  9. 給變量的類(lèi)型做注解(annotation)時(shí),不要把變量名和冒號(hào)隔開(kāi),但在類(lèi)型信息前應(yīng)該有一個(gè)空格。

圖片



02 與命名有關(guān)的建議

(7條 26條

PEP 8建議采用不同的方式來(lái)給Python代碼中的各個(gè)部分命名,這樣在閱讀代碼時(shí),就可以根據(jù)這些名稱(chēng)看出它們?cè)赑ython語(yǔ)言中的角色。遵循以下與命名相關(guān)的建議。

  1. 函數(shù)、變量及屬性用小寫(xiě)字母來(lái)拼寫(xiě),各單詞之間用下劃線相連,例如:lowercase_underscore。
  2. 受保護(hù)的實(shí)例屬性,用一個(gè)下劃線開(kāi)頭,例如:_leading_underscore。
  3. 私有的實(shí)例屬性,用兩個(gè)下劃線開(kāi)頭,例如:__double_leading_underscore
  4. 類(lèi)(包括異常)命名時(shí),每個(gè)單詞的首字母均大寫(xiě),例如:CapitalizedWord。
  5. 模塊級(jí)別的常量,所有字母都大寫(xiě),各單詞之間用下劃線相連,例如:ALL_CAPS。
  6. 類(lèi)中的實(shí)例方法,應(yīng)該把第一個(gè)參數(shù)命名為self,用來(lái)表示該對(duì)象本身。
  7. 類(lèi)方法的第一個(gè)參數(shù),應(yīng)該命名為cls,用來(lái)表示這個(gè)類(lèi)本身。


03 與表達(dá)式和語(yǔ)句有關(guān)的建議

(6條 26條

The Zen of Python中提到:“每件事都應(yīng)該有簡(jiǎn)單的做法,而且最好只有一種?!盤(pán)EP 8就試著運(yùn)用這個(gè)理念,來(lái)規(guī)范表達(dá)式和語(yǔ)句的寫(xiě)法。

  1. 采用行內(nèi)否定,即把否定詞直接寫(xiě)在要否定的內(nèi)容前面,而不要放在整個(gè)表達(dá)式的前面,例如應(yīng)該寫(xiě)if a is not b,而不是if not a is b。
  2. 不要通過(guò)長(zhǎng)度判斷容器或序列是不是空的,例如不要通過(guò)if len(somelist) == 0判斷somelist是否為[]''等空值,而是應(yīng)該采用if not somelist這樣的寫(xiě)法來(lái)判斷,因?yàn)镻ython會(huì)把空值自動(dòng)評(píng)估為False。
  3. 如果要判斷容器或序列里面有沒(méi)有內(nèi)容(比如要判斷somelist是否為[1]'hi'這樣非空的值),也不應(yīng)該通過(guò)長(zhǎng)度來(lái)判斷,而是應(yīng)該采用if somelist語(yǔ)句,因?yàn)镻ython會(huì)把非空的值自動(dòng)判定為True。
  4. 不要把if語(yǔ)句、for循環(huán)、while循環(huán)及except復(fù)合語(yǔ)句擠在一行。應(yīng)該把這些語(yǔ)句分成多行來(lái)寫(xiě),這樣更加清晰。
  5. 如果表達(dá)式一行寫(xiě)不下,可以用括號(hào)將其括起來(lái),而且要適當(dāng)?shù)靥砑訐Q行與縮進(jìn)以便于閱讀。
  6. 多行的表達(dá)式,應(yīng)該用括號(hào)括起來(lái),而不要用\符號(hào)續(xù)行。

圖片



04 與引入有關(guān)的建議

(4條 26條

PEP 8對(duì)于怎樣在代碼中引入并使用模塊,給出了下面幾條建議。

  1. import語(yǔ)句(含from x import y)總是應(yīng)該放在文件開(kāi)頭。
  2. 引入模塊時(shí),總是應(yīng)該使用絕對(duì)名稱(chēng),而不應(yīng)該根據(jù)當(dāng)前模塊路徑來(lái)使用相對(duì)名稱(chēng)。例如,要引入bar包中的foo模塊,應(yīng)該完整地寫(xiě)出from bar import foo,即便當(dāng)前路徑為bar包里,也不應(yīng)該簡(jiǎn)寫(xiě)為import foo。
  3. 如果一定要用相對(duì)名稱(chēng)來(lái)編寫(xiě)import語(yǔ)句,那就應(yīng)該明確地寫(xiě)成:from . import foo
  4. 文件中的import語(yǔ)句應(yīng)該按順序劃分成三個(gè)部分:首先引入標(biāo)準(zhǔn)庫(kù)里的模塊,然后引入第三方模塊,最后引入自己的模塊。屬于同一個(gè)部分的import語(yǔ)句按字母順序排列。

  • 提示:Pylint是一款流行的Python源碼靜態(tài)分析工具。它可以自動(dòng)檢查受測(cè)代碼是否符合PEP 8風(fēng)格指南,而且還能找出Python程序里的許多種常見(jiàn)錯(cuò)誤。很多IDE(集合成開(kāi)發(fā)環(huán)境)與編輯器,都包含這樣的linting工具或者支持類(lèi)似的插件。
    https://www./


要點(diǎn)

  • 編寫(xiě)Python代碼時(shí),總是應(yīng)該遵循PEP 8風(fēng)格指南。
  • 與廣大Python開(kāi)發(fā)者采用同一套代碼風(fēng)格,可以使項(xiàng)目更利于多人協(xié)作。
  • 采用一致的風(fēng)格編寫(xiě)代碼,代碼的后續(xù)修改更容易。

關(guān)于作者:布雷特·斯拉特金(Brett Slatkin),Google首席軟件工程師,他是Google Surveys的聯(lián)合技術(shù)創(chuàng)始人,也是PubSubHubbub協(xié)議的共同創(chuàng)造者之一。此外,Slatkin還發(fā)布了Google的第一個(gè)云計(jì)算產(chǎn)品——App Engine。早在15年前,Slatkin就開(kāi)始在工作中使用Python管理Google大量的服務(wù)器群。他擁有紐約哥倫比亞大學(xué)計(jì)算機(jī)工程專(zhuān)業(yè)學(xué)士學(xué)位。

本文摘編自Effective Python:編寫(xiě)高質(zhì)量Python代碼的90個(gè)有效方法》(原書(shū)第2版),

本文摘編自Effective Python:編寫(xiě)高質(zhì)量Python代碼的90個(gè)有效方法》(原書(shū)第2版),經(jīng)出版方授權(quán)發(fā)布。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多