讓你的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: