Python PEP8標准


1.編碼

  1. 如無特殊情況,文件一律使用utf-8編碼
  2. 如無特殊情況,文件頭部必須添加# -*- coding:utf-8 -*- 標志

 

2.代碼

  1. 統一使用四個空格縮進
  2. 每行代碼不超過80個字符
  3. 自然語言使用雙引號,如input里面,或者錯誤信息,正則表達式使用原生的雙引號r" ",
  4. 機器標識使用單引號,如dict里面的key,因此代碼里面多數應該使用單引號。
  5. 文檔字符串使用三個雙引號。""" """

 

3.空行

  1. 模塊級函數和類定義之間空兩行
  2. 類成員函數之間空一行
  3. 可以使用多個空行分隔多組相關函數
  4. 函數中可以用空行分隔出邏輯相關的代碼
class A:

    def __init__(self):
        pass

    def hello(self):
        pass


def main():
    pass

 

4.import語句

  1. import 語句應當分行書寫
  2. import語句應當使用absolute import
  3. import語句應當放在文件頭部,置於模塊說明及docstring之后,全局變量之前
  4. import語句應該按照順序排列,每組之間用一個空格分隔,按照內置模塊,第三方模塊,自己所寫的模塊調用順序,同時每組內部按照字母表順序排列
#Right
import os
import sys

from subprocess import Popen, PIPE

from foo.bar import Bar

#False
import os, sys
from ..bar import  Bar

 

5.空格

在二元運算符兩邊各空一格:[=, - ,+ =, > , in , is ,not , and]

i = i + 1
x = x * x + 2
c = (a + b) * (a - b)

函數的參數列表中,","之后要有空格,默認值等號兩邊不要添加空格,左括號之后,右括號之前不要有空格

def complex(real, image=0):
    pass

 

6.換行

python支持括號內的換行,這時有兩種情況:

1.第二行縮進到括號的起始處

2.第二行縮進四個空格,適用於起始括號就換行的情形

a = list(var1, var2,
           var3)

a=list(
    var1,
    var2,
    var3)

 

7.注釋

#號后需空一格,不要使用無意義的注釋

x = x + 1 # 邊框加粗一個像素

 

8.docstring

1.所有公共模塊,函數,類,方法都應該有docstring。

 

9.命名規范

  • 應避免使用小寫字母l,大寫字母O或I單獨作為一個變量,以區分數字1和0.
  • 包和模塊使用全小寫命名,,盡量不要使用下划線
  • 類名使用CamelClass命名風格,內部類可用一個下划線開頭
  • 函數使用下划線分隔的小寫命名
  • 常量使用以下划線分隔的大寫命名
MAX_OVERFLOW = 100

class FooBar:

    def foo_bar():
        pass
  • 單字符命名應該盡量避免,除了計數器和迭代器
  • 模塊名盡量小寫命名,首字母小寫,盡量不要使用下划線(除非多個單詞且數量不多的情況)
  • 類名:首字母大寫,私有類可以用一個下划線開頭
  • 將相關的類和頂級函數放在同一個模塊中,沒必要限制一個類一個模塊
  • 函數名:一律小寫,如有多個單詞一律用下划線隔開
  • 私有函數在函數名前加一個下划線
  • 變量名盡量小寫,如有多個單詞,用下划線隔開
  • 常量采用全大寫,如有多個單詞,使用下划線隔開
#False
s = "Hello World"
l = 1
import Decoder

#True
class Farm():
class Animal():
class _PrivateFarm():
def run():
count = 0
school_name = "xidian"
MAX_CLIENT = 100

 

10.程序設計規范

1.盡量不要直接將代碼寫在模塊頂層,在執行主程序之前總是檢查:if __name__ = '__main__',這樣模塊被導入主程序時就不會被執行了

#wrong
do_something()

#right
def main():
    do_something():

if __name__ == '__main__':
    main()

所有的頂層代碼在模塊導入時都會被執行,要小心不要去調用函數,創建對象,或者執行哪些不該被執行的操作

 

盡量不要用+號拼接字符串,使用join函數拼接

在不復雜的情況下,盡量多用列表生成式,可以是代碼更清晰

盡量使用map和filter等內置函數而不是自己去寫循環

正則表達式之前一律加r,正則表達式使用之前一律編譯好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM