Python 中的 PEP 8 的用途是什麼?

在本教程中,我們將學習什麼是 PEP-8,以及如何在 Python 編碼中使用它。我們將討論在編程中使用 PEP 的指導原則——本教程面向初學者到中級。我們還將討論在編碼時使用 PEP-8 的好處。

什麼是 PEP?

PEP 是 Python 企業建議書的縮寫形式。編寫具有適當邏輯的代碼是編程的一個關鍵因素,但許多其他重要因素也會影響代碼的質量。開發人員的編碼風格使代碼更加可靠,每個開發人員都應該記住 Python 嚴格遵循字符串的順序和格式。

自適應良好的編碼風格使代碼更易讀。代碼對最終用戶來說變得容易了。

PEP 8 是一個文檔,提供了用 Python 編寫可讀代碼的各種指南。PEP 8 描述了開發人員如何編寫漂亮的代碼。它是由吉多·范·羅蘇姆、巴里·華沙和尼克·科格蘭在 2001 年正式撰寫的。PEP 的主要目的是增強代碼的可讀性和一致性。

為什麼 PEP 8 很重要?

PEP 8 增強了 Python 代碼的可讀性,但是為什麼可讀性這麼重要呢?讓我們理解這個概念。

Python 的創造者吉多·范·羅蘇姆說:「代碼比寫出來的要多得多。」代碼可以在幾分鐘、幾個小時或者一整天內寫完,但是一旦我們寫完了代碼,就再也不會重寫了。但是有時候,我們需要一遍又一遍地閱讀代碼。

在這一點上,我們必須知道為什麼要在代碼中寫下這一行。代碼應該反映每一行的意思。這就是可讀性如此重要的原因。

我們將描述一些重要的指導方針,用於編寫其他人也能閱讀的有效代碼。

命名約定

當我們編寫代碼時,我們需要給很多東西命名,比如變量、函數、類、包等等。選擇一個合適的名字會節省時間和精力。當我們一段時間後回頭看文件時,我們可以很容易地回憶起某個變量、函數或類代表了什麼。開發者應該避免選擇不合適的名字。

Python 中的命名約定略顯混亂,但有一些約定我們可以輕鬆遵循。讓我們看看下面的命名約定。

示例-

單個小寫字母


a = 10

單個大寫字母


A = 10

小寫字母


var = 10

帶下劃線的小寫字母


number_of_apple = 5

大寫字母


VAR = 6

大寫帶下劃線


NUM_OF_CARS =20 

大寫單詞


NumberOfBooks = 100

注意:在 CapWords 中使用縮寫時,請將縮寫的所有字母大寫。因此,httpservereror 比 httpservereror 更好。

名稱樣式

下表指定了 Python 中一些常見的命名風格。請考慮下表。

| 類型 | 命名約定 | 例子 |
| 功能 | 我們應該使用小寫單詞或者用下劃線分隔單詞。 | 我的函數,我的函數 |
| 可變的 | 我們應該使用小寫字母、單詞或單獨的單詞來增強可讀性。 | 變量名稱 |
| 班級 | 類名第一個字母要大寫;使用駱駝案例。不要用下劃線分隔單詞。 | 我的類、表單、模型 |
| 方法 | 我們應該使用小寫字母、單詞或單獨的單詞來增強可讀性。 | 類 方法,方法 |
| 常數 | 我們應該使用簡短的大寫字母、單詞或單獨的單詞來增強可讀性。 | MYCONSTANT,my
constant 常數-my 常數 |
| 組件 | 我們應該使用小寫字母、單詞或單獨的單詞來增強可讀性。 | Module_name.py,module.py |
| 包裹 | 我們應該使用小寫字母、單詞或單獨的單詞來增強可讀性。不要用下劃線分隔單詞。 | 包,我的包, |

以上是一些常見的命名約定,有助於美化 Python 代碼。為了進一步改進,我們應該仔細選擇名稱。

代碼布局

代碼布局定義了代碼的可讀性。在本節中,我們將學習如何使用空白來提高代碼的可讀性。

刻痕

與其他編程語言不同,縮進用於定義 Python 中的代碼塊。縮進是 Python 編程語言的重要部分,它決定了代碼行的級別。一般來說,我們使用 4 個空格進行縮進。讓我們理解下面的例子。

示例-


x = 5
if x ==  5:
    print('x is larger than 5')

在上例中,如果 if語句 的條件為真,縮進打印語句將被執行。這個縮進定義了代碼塊,並告訴我們當調用函數或條件觸發器時執行什麼語句。

  • 標籤與空間

我們也可以使用標籤提供連續的空格來表示縮進,但是白色空格是最可取的。Python 2 允許製表符和空格的混合,但是我們會在 Python 3 中得到一個錯誤。

*### 換行後縮進

當使用行延續來保持行少於 79 個字符時,使用縮進是很重要的。它提供了在兩行代碼和擴展兩行的單行代碼之間進行確定的靈活性。讓我們理解下面的例子。

示例-


# Correct Way:

# Aligned with opening delimiter.
obj = func_name(argument_one, argument_two,
                         argument_three, argument_four

我們可以使用以下結構。


# first line doesn't has any argument 
# We add 4 spaces from the second line to discriminate arguments from the rest.
def function_name(
        argument_one, argument_two, argument_three,
        argument_four):
    print(argument_two)

# 4 space indentation to add a level.
foo = long_function_name(
    var_one, var_two,
    var_three, var_four)

使用文檔字符串

Python 提供了兩種類型的文檔字符串或文檔字符串——單行和多行。我們使用三重引號來定義單行或多行引號。基本上,這些用於描述功能或特定程序。讓我們理解下面的例子。

示例-


def add(a, b):
    """This is simple add method"""

    """This is
    a
   simple add program to add
   the two numbers. """

二進制運算符之前還是之後應該換行?

在二進制操作之前或之後換行是一種傳統的方法。但是它會極大地影響可讀性,因為操作符分散在不同的屏幕上,每個操作符都遠離其操作數並位於前一行。讓我們理解下面的例子。

示例-


# Wrong:
# operators sit far away from their operands
marks = (engilsh_marks +
          math_marks +
          (science_marks - biology_marks) +
          Physics_marks

正如我們在上面的例子中看到的,閱讀起來似乎相當混亂。我們可以通過使用以下結構來解決這類問題。

示例-


# Correct:
# easy to match operators with operands
Total_marks = (English_marks
          + math_marks
          + (science_marks - biology_marks)
          + physics_marks

Python 允許我們在二進制運算符之前或之後換行,只要約定在本地一致。

導入模塊

我們應該導入分隔線中的模塊,如下所示。


import pygame
import os
import sys

錯誤的


import sys, os

我們也可以使用以下方法。


from subprocess import Popen, PIPE

導入語句應該寫在文件的頂部或任何模塊注釋的後面。絕對導入是推薦的,因為它們可讀性更強,性能也更好。


import mypkg.sibling
from mypkg import sibling
from mypkg.sibling import example

但是,我們可以使用顯式的相對導入來代替絕對導入,尤其是在處理複雜的包時。

空行

空行可以提高 Python 代碼的可讀性。如果多行代碼聚集在一起,代碼將變得更難閱讀。我們可以通過使用許多空白豎線來消除這一點,讀者可能需要滾動更多的內容。按照以下說明添加垂直空白。

  • 頂級函數和類用兩行- 把多餘的垂直空間放在它們周圍,這樣就可以理解了。

class FirstClass:
    pass

class SecondClass:
    pass

def main_function():

    return None
  • 類內的單個空行- 我們在類中定義的函數是相互關聯的。讓我們看看下面的例子-

class FirstClass:
    def method_one(self):
        return None

    def second_two(self):
        return None
  • 在函數內部使用空行- 有時候,我們需要編寫一個複雜的函數有由幾個步驟組成的 return 語句。所以我們可以在每一步之間加上空行。讓我們理解下面的例子。

def cal_variance(n_list):
    list_sum = 0
    for n in n_list:
        list_sum = list_sum + n
    mean = list_sum / len(n_list)

    square_sum = 0
    for n in n_list:
        square_sum = square_sum + n**2
    mean_squares = square_sum / len(n_list)

    return mean_squares - mean**2

以上方法可以去除空格,提高代碼的可讀性。

放上右大括號

我們可以使用換行符在括號內換行。PEP 8 允許我們在隱含行延續中使用右大括號。讓我們理解下面的例子。

  • 將右大括號與第一個非空格對齊。

    list_numbers = [
    5, 4, 1,
    4, 6, 3,
    7, 8, 9
     ]
  • 將右大括號與第一行的第一個字符對齊。

list_numbers = [
    5, 4, 1,
    4, 6, 3,
    7, 8, 9
]

這兩種方法都適合使用,但一致性是關鍵,所以選擇任意一種,繼續使用。

評論

注釋是任何編程語言的組成部分。這些是解釋代碼的最好方法。當我們用適當的注釋記錄我們的代碼時,任何人都可以理解代碼。但是我們應該記住以下幾點。

  • 從大寫的後者開始,寫出完整的句子。
  • 如果代碼發生變化,請更新注釋。
  • 將注釋和文檔字符串的行長度限制為 72 個字符。

阻止注釋

塊注釋是小部分代碼的好選擇。當我們編寫幾行代碼來執行單個操作(如循環迭代)時,這樣的注釋非常有用。它們幫助我們理解代碼的目的。

PEP 8 提供了以下編寫注釋塊的規則。

  • 縮進塊注釋應該在同一級別。
  • 每一行以#開頭,後跟一個空格。
  • 使用單個#分隔行。

讓我們看看下面的代碼。


for i in range(0, 5):
    # Loop will iterate over i five times and print out the value of i
    # new line character
    print(i, '\n')

對於技術代碼,我們可以使用多個段落。讓我們理解下面的例子。

內嵌注釋

內聯注釋用於解釋一段代碼中的單個語句。我們可以很快理解為什麼我們要寫那一行代碼。PEP 8 為內聯注釋指定了以下規則。

  • 以#和單個空格開始注釋。
  • 小心使用內嵌注釋。
  • 我們應該將行內注釋與它們引用的語句分開。

以下是內聯注釋的示例。


a = 10    # The a is variable that holds integer value.

有時,我們可以使用命名約定來替換內嵌注釋。


x = 'Peter Decosta' #This is a student name

我們可以使用以下命名約定。


Student_name = 'Peter Decosta'

內聯注釋是必不可少的,但是塊注釋使代碼更易讀。

避免不必要的添加空白

在某些情況下,使用空格會使代碼更難閱讀。過多的空格會使代碼過於稀疏,難以理解。我們應該避免在行尾添加空格。這就是所謂的尾隨空格。

讓我們看看下面的例子。

示例- 1


# Recommended
list1 = [1, 2, 3]

# Not recommended
List1 = [ 1, 2, 3, ]

示例- 3


x = 5
y = 6

# Recommended
print(x, y)

# Not recommended
print(x , y)

編程建議

我們知道,在 Python 中有幾種方法可以執行類似的任務。在本節中,我們將看到 PEP 8 為提高一致性而提出的一些建議。

避免使用等價運算符比較布爾值


# Not recommended
bool_value = 10 > 5
if bool_value == True:
    return '10 is bigger than 5'

我們不應該使用等價運算符==來比較布爾值。它只能取真或假。讓我們看看下面的例子。


# Recommended
if my_bool:
    return '10 is bigger than 5'

這種方法很簡單,這就是為什麼 PEP 8 鼓勵它。

if語句中的空序列為假

如果我們想檢查給定的列表是否為空,我們可能需要檢查列表的長度,因此我們需要避免以下方法。


# Not recommended
list1 = []
if not len(list1):
    print('List is empty!')

但是,如果有任何空列表、集合或元組。我們可以用下面的方法來檢查。


# Recommended
list1 = []
if not list1:
    print('List is empty!')

第二種方法更合適;這就是為什麼 PEP 8 鼓勵它。

不要在 if語句中使用 not is

有兩個選項可以檢查變量是否有定義的值。第一個選項是 x 不是無,如下例所示。


# Recommended
if x is not None:
    return 'x exists!'

第二種選擇是評估 x 是否為無以及 if語句是否基於非結果。


# Not recommended
if not x is None:
    return 'x exists!'

這兩個選項都是正確的,但是第一個選項很簡單,所以 PEP 8 鼓勵它。

結論

我們已經討論了 PEP 8 準則,以使代碼消除歧義並增強可讀性。這些準則改進了代碼,尤其是在與潛在的員工或合作者共享代碼時。我們已經討論了什麼是 PEP 以及為什麼使用它,如何編寫符合 PEP 8 的代碼。此外,我們還簡要介紹了命名約定。如果您想了解更多關於 PEP 8 的信息,您可以閱讀完整的文檔或訪問PEP8.org。


原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/237885.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:08
下一篇 2024-12-12 12:08

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29

發表回復

登錄後才能評論