1. 程式人生 > >讓你的python程式碼更優雅(pythonic)—— 基於PEP8

讓你的python程式碼更優雅(pythonic)—— 基於PEP8

  寫出優雅的程式碼,自己除錯bug更加容易,也便於別人檢視,下面談談一下讓程式碼更加優雅的寫法,主要是基於 PEP8。 
   
1,縮排與換行,每級縮排使用4個空格。

# yes:
# 續行與其包裹元素要對齊
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

# No:
# 這種就不好
foo = long_function_name(var_one, var_two,
    var_three, var_four)

2,限制所有行的最大長度為 79 個字元。

3,空行。 
  頂層函式和類之間使用兩個空行。 
  類的方法之間使用一個空行。 
  在函式中使用空行來表示不同的邏輯段落。

4,匯入通常應當使用單獨的行。

# Yes:
import os
import sys

# No: 
import sys, os

但是可以這麼做:
from subprocess import Popen, PIPE

  匯入總是位於檔案的頂部,在模組註釋和文件字串之後,在模組的全域性變數與常量之前。
  匯入應該按照以下的順序分組:
    standard library imports 標準庫匯入
    related third party imports 相關第三方匯入
    local application/library specific imports 本地應用程式/庫的特定匯入
  每組匯入之間使用空行隔開。
  從一個包含類的模組中匯入類時,常常這麼寫:
    from myclass import MyClass
    from foo.bar.yourclass import YourClass
    
5,下面的情況,避免多餘空格。


  緊貼著圓括號、方括號和花括號:

Yes: spam(ham[1], {eggs: 2})
No:  spam( ham[ 1 ], { eggs: 2 } )

緊貼在逗號,分號或冒號之前:

Yes: if x == 4: print x, y; x, y = y, x
No:  if x == 4 : print x , y ; x , y = y , x

緊貼在函式呼叫的引數列表的圓括號的開括號前:

Yes: spam(1)
No:  spam (1)

緊貼在索引或切片的方括號的開括號前:

Yes: dict['key'] = list[index]
No:  dict ['key'] = list [index]

在賦值(或其他)語句的運算子周圍,不要為了對齊而使用多個空格。

Yes:

x = 1
y = 2
long_variable = 3

No:
x             = 1
y             = 2
long_variable = 3

  總是在這些二元運算子前後加一個空格:賦值(=),自增賦值(+=,-= 等等), 比較(==,<,>,!=,<>,<=,>=,in,not in,is,is not),布林運算(and,or,not)。 
  在算術運算子前後加空格:

Yes:
i = i + 1
submitted += 1
x = x * 2 - 1
hypot2 = x * x + y * y
c = (a + b) * (a - b)

No:
i=i+1
submitted +=1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)

不要在一個關鍵字引數或者一個預設引數值的 = 符號前後加一個空格

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)

通常不推薦使用複合語句(一行程式碼中有多條語句)。

Yes:
if foo == 'blah':
    do_blah_thing()
do_one()
do_two()
do_three()

No:
if foo == 'blah': do_blah_thing()
do_one(); do_two(); do_three()

6,註釋
  不好理解的註釋不如沒有註釋。註釋要和程式碼保持與時俱進!
  註釋應該是一條完整的句子。如果註釋是一個短語或句子,它的第一個字應該大寫,除非它是一個小寫字母開頭的識別符號(絕對不要改變識別符號的大小寫)。
  如果註釋很短,那麼結尾的句號可以省略。塊註釋通常由一個或多個段落組成, 這些段落由完整的句子構成,每個句子都應該使用句號結尾。
  句號結尾的句子後面應該有2個空格。
  來自非英語國家的Python程式設計師:請使用英語寫註釋,除非你120%肯定你的程式碼將永遠不會 被不說你的語言的人閱讀。

7,命名規範。
  永遠不要使用 ‘l’(小寫的L),’O’(大寫的O),或者’I’(大寫的I)作為單字變數名。
  毫無例外,類名要用首字母大寫的規則。內部類,要加上前導下劃線。
  函式名應該用小寫,為了增加可讀性可以用下劃線分隔。
  使用函式命名規則:使用下劃線分隔的小寫字母會提高可讀性。

8,其他。
  別用‘==’進行布林值和 True 或者 False 的比較

Yes:   if greeting:
No:    if greeting == True: