PEP 8-Python編碼規范整理

學習.png

我是用Python的IDE:pycharm來編寫Python代碼的,用IDE編寫代碼有一個好處就是語法高亮,智能提示。Python的代碼樣式規范稱之為PEP 8規范,每次編寫代碼如果有出現不符合PEP 8規范的話,pycharm就會提示我,就像下面這樣:

image

上面的提示意思就是:語句后面跟注釋的話至少要隔兩個空格,而我只打了一個空格。

養成一個良好的編碼習慣是非常重要的,因為代碼是寫給人讀的,一手漂亮的代碼看起來就是賞心悅目。在學習編程之初就要有意培養起良好的編碼風格,這是很受益的。

于是我就特意整理了一下PEP 8規范中一些常用的準則,如果需要掌握更加詳盡的Python代碼規范,請看PEP 8的官方文檔:

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

一:代碼布局

1 縮進:

每個縮進級別使用4個空格。

def __init__(self):
    """初始化屬性"""
   self.new_urls = set()  # 未爬取的url集合
   self.old_urls = set()  # 已爬取的url集合

2 制表符or空格?

空格是首選的縮進方法。
Python 3不允許混合使用制表符和空格來縮進。
Python 2代碼縮進與制表符和空格的混合應轉換為使用空格專有。

有研究顯示:使用空格縮進的程序員的薪資比使用制表符縮進的程序員的薪資多8%。所以一定要用空格縮進呀。

3 每行代碼的最大長度:

將所有行限制為最多79個字符。
Python標準庫是保守的,需要將行限制為79個字符(文檔字符串/注釋為72)。

4 空白行:

用兩個空白行分隔頂層函數和類定義。
類中的方法定義用一個空行分隔。
可以使用額外的空白行(節省空間)來分隔相關功能組。在一堆相關的單行程序(例如一組虛擬執行程序)之間可能會省略空白行。
在函數中使用空行來節省邏輯部分。
恰當的使用空白行可以提高代碼的可讀性。

5 源文件編碼:

核心Python發行版中的代碼應該始終使用UTF-8(或Python 2中的ASCII)。
使用ASCII(Python 2)或UTF-8(Python 3)的文件不應該有編碼聲明。
但是在Python 2中使用UTF-8編碼就需要有編碼聲明:

# -*- coding: utf-8 -*-
#! /usr/bin/env python2

上面兩行代碼常放在Python 2代碼中的開頭,第一行意思是指定源文件以utf-8格式編碼,第二行意思是指定源文件的python解釋器在環境變量中去尋找。

6 導入庫函數:

若是導入多個庫函數,應該分開依次導入:

import requests
import csv

導入總是放在文件的頂部,在任何模塊注釋和文檔字符串之后,在模塊全局變量和常量之前。

"""
一種簡單的方式是使用模塊json來存儲數據
"""
# 使用函數json.dump()來存儲數據# 函數json.dump()接受兩個對象:要存儲的數據以及可用于存儲數據的文件對象
import json

numbers = [2, 3, 5, 7, 11, 13]
filename = "numbers.json"  # 使用文件擴展名.json來指出文件存儲的數據為JSON格式with open(filename, "w") as file_object:  # 以寫入模式打開文件
    json.dump(numbers, file_object)

導入應按以下順序進行:
① 標準庫導入
② 有關的第三方庫進口
③ 本地應用程序/庫特定的導入

import sys
import pygamefrom bullet 
import Bulletfrom alien 
import Alienfrom time 
import sleep

從包含類的模塊中導入一個類時,通常可以這樣寫:

from settings import Settings
from ship import Ship
import game_functions as gf
from pygame.sprite import Group
from game_stats import GameStats
from button import Button
from scoreboard import Scoreboard

應避免通配符導入(import *),因為它們使名稱空間中出現的名稱不清楚

二:字符串

1 在Python中,單引號字符串和雙引號字符串是相同的。這個PEP沒有為此提出建議。

2 對于三引號字符串,常用三個雙引號作文檔字符串,文檔字符串常用在模塊的開端用以說明模塊的基本功能,或緊跟函數定義的后面用以說明函數的基本功能,關于三引號字符串更多具體的細節,可以查閱其官方文檔:

https://www.python.org/dev/peps/pep-0257/

三:表達式和語句中的空格
1 在以下情況下避免無關的空格:

① 在括號或大括號內:

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

② 在尾隨逗號和后面的右括號之間:

Yes: foo = (0,) 
No:  bar = (0, )

③ 在逗號,分號或冒號前面:

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: dct['key'] = lst[index] 
No:  dct ['key'] = lst [index]

⑥ 在一個賦值(或其他)運算符周圍有多于一個的空間來對齊它:

Yes:

x = 1 y = 2 long_variable = 3

No:

x             = 1 y             = 2 long_variable = 3

2 其他建議:

① 總是圍繞這些二元運算符在兩側使用一個空格:

賦值(=),擴充賦值(+ =,- = 等),
比較(==,<,>,!=,<>,<=, > =,在,不在,是,是不是),
布爾值(和, 或,不)

② 用于指示關鍵字參數或默認參數值時,不要在=符號周圍使用空格。

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)

四:注釋

1 代碼更改時,相應的注釋也要隨之更改。

2 塊注釋:塊注釋通常適用于后面的一些(或全部)代碼,并縮進到與該代碼相同的級別。塊注釋的每一行都以#和一個空格開始。

3 行注釋:顧名思義就是對某一語句行進行注釋,注釋應該與語句至少隔開兩個空格,用#和一個空格開始。

五:命名約定

1 采用描述性的命名規則,例如一個實現某種功能的類或函數,那這個類或函數的名字就以相應的功能實現作為命名,簡單易懂。

2 類的命名采用駝峰命名法,即每個單詞的首字母大寫。

3 切勿將字符’l’(小寫字母el),’O’(大寫字母oh)或’I’(大寫字母)作為單個字符變量名稱。在一些字體中,這些字符與數字1和零是無法區分的。當試圖使用“l”時,請使用“L”。

4 函數名稱應該是小寫的,為了提高可讀性,必須使用由下劃線分隔的單詞。如果函數參數的名稱與保留關鍵字沖突,通常最好追加一個尾部下劃線,而不是使用縮寫或拼寫損壞。

更多具體的編碼規范請查閱其官方文檔:

https://github.com/python/peps/blob/master/pep-0008.txt

每天學習一點點,每天進步一點點.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 更新時間:2016/5/13 介紹 本文檔所提供的編碼規范,適用于主要的Python發行版中組成標準庫的Pytho...
    超net閱讀 5,901評論 0 15
  • Python是一種對代碼風格很重視的語言,從縮進就能看出這一點,Python強調易于理解。最近在負責代碼重構的工作...
    知曰閱讀 11,130評論 1 85
  • --< > 令人討厭的小人物身上有著愚蠢的一致性 --(A Foolish Consistency is the ...
    LittleWizard閱讀 3,264評論 0 4
  • PEP介紹 PEP是 Python Enhancement Proposal 的縮寫,是Python增強建議書的意...
    JasonDing閱讀 4,848評論 3 40
  • 源地址:http://www.runoob.com/w3cnote/google-python-styleguid...
    skaiger閱讀 517評論 0 0