淺談Python之PEP8編碼風格
相信有不少同學都知道,當我們在使用IDE寫一段程序的時候,如果我們的語法有錯誤,那麼IDE就會相應的畫出紅線
(這裡我們少了一個:)
那麼是不是當我們的代碼中沒有紅色的下劃線,就代表沒有任何錯誤呢?
emmm,其實在某種程度上可以這樣說
當我們的代碼沒有紅色下劃線的時候,確實可以準確的運行起來
BUT
你覺得這樣帶著灰色下劃線的代碼好看嗎?
最為一個強迫症患者,這根本不能忍啊!
這就是PyCharm中最著名的PEP8代碼規範
下面我們就來看一下如何寫出,不帶下劃線的優雅代碼
縮進(indentation)
使用四個空格表示每個縮進級別。
規範操作:
# 使用開分隔符(opening delimiter)進行對齊
foo = long_func_name(var_one, var_two, var_three, var_four)
# 使用更多的縮進以和其他的代碼單元區別開來# 如下例的,參數部分比函數體多四個縮進以和函數體進行區別def long_func_name( var_one, var_two, var_three, var_four) print(var_one)
# 懸掛縮進(hanging indents):增加一個縮進級別
foo = long_func_name( var_one, var_two, var_three, var_four)
# 或者:
foo = long_func_name( var_one, var_two, var_three, var_four)a = [1,2,3,4,5,6]a = [1,2,3,4,5,6]
不規範操作:
# 當不適用垂直對齊時,禁止在第一行使用參數# 換句話說,在垂直對齊時,才可在第一行使用參數foo = lone_func_name(var_one, var_two, var_three, var_four)
# 當縮進不足以區分代碼結構時,增加一個縮進級別
deflong_func_name( var_one, var_two, var_three var_four):print(var_one)
最大行長度
所有行的最大長度均為79個字元。
withopen("")asfile_1,
open("")asfile_2: file_2.write(file_1.read())
使用正確的換行位置。推薦的位置在二元操作符(binary operator,如下述代碼中的、以及)之後,而不是在它們之前:
classRectangle(Shape):
def__init__(self,width,height,
color="black",emphasis=None,highlight=):
if(width ==andheight ==and
color =="red"andemphasis =="strong"or
height >100):
raiseValueError("sorry, you lose")
ifwidth ==andheight ==and(color =="red"oremphasisis None):
raiseValueError("I don"t think so -- values are %s, %s"%
(width,height))
Shape.__init__(self,width,height,color,
emphasis,highlight)
空行
頂級函數(當前文件中的第一個函數)或者頂級類(當前文件的第一個類)之前要有兩個空行
定義在類內部的函數(成員函數)之間要留有一個空行
可以使用額外的空行(但要注意節制)以區分不同的函數組,
在一堆只有一行的函數之間不要使用空行(比如一些函數的空實現)
在函數內部使用空行,來標識不同的邏輯單元
imports
在獨立的行中導入不同的包
規範操作:
不規範操作:
import sys,os
但從一個包中添加不同的模塊或者函數也是允許的:
fromsubprocessimportPopen, PIPE
import文件應當總是位於文件的首部,僅在模塊備註和文檔之後,在模塊的全局變數和常量之前的位置
import文件的順序:
1. 標準庫(如sys、os)
2. 相關的第三方的庫(如numpy、pandas、matplotlib)
3. 自定義的.py文件或者自定義的庫
以組的形式標識上述三種import文件,也即是用一個空行隔開
推薦使用絕對路徑包含,因為可讀性更好,並且不易出錯。
importmypkg.sibling
frommypkgimportsiblingfrommypkg.siblingimportexample
然而,外部的相對包含也是一種可接受的替換,尤其是處理複雜的包層次時,也即是絕對包含將造成不必要的繁瑣。
from.importsibling
from.siblingimportexample# .表示當前路徑
標準庫不存在複雜的包層次關係,應當總是使用其絕對導入路徑。
應當避免通配符導入文件
字元串
在python中,不對單引號和雙引號作區分,PEP的代碼規範也不對此有所推薦。任選其一,統一使用即可。然而,當一個字元串包含單引號或者雙引號時,使用另外一種方式避免轉義符()的使用,以提高可讀性。
更多的規範可以查看PEP8的官方文檔
https://www.python.org/dev/peps/pep-0008/#fn-hi
※R開發人員使用Python
※偽·從零開始學Python-1.2 Python的開發工具
TAG:Python |