有用的 Python 提示和技巧 — #5

2024年12月05日04:43:03 科技 1221

·

有用的 Python 提示和技巧 — #5 - 天天要聞

推導式和利用文檔字元串

文檔字元串是 Python 代碼文檔的關鍵組成部分。它們提供了一種簡單且標準化的方式來記錄模塊、函數、類和方法,使開發人員能夠了解代碼組件的用途和功能。在 Python 中,文檔字元串只是用三引號(「」「''')括起來的字元串文字,直接放置在它記錄的元素下方。Python 的內置 help() 函數和文檔生成工具(如 Sphinx)利用文檔字元串,使其成為可維護和可訪問代碼的基礎。

語法和約定

文檔字元串通常遵循 Python 的 PEP 257 樣式指南推薦的特定結構:

def example(param1, param2):
    """
    Brief description of what the function does.

    More detailed explanation if needed, including any
    edge cases or considerations.
    
    Args:
        param1 (type): Explanation of param1.
        param2 (type): Explanation of param2.
    Returns:
        type: Explanation of the return value.
    Raises:
        exceptionType: Explanation of when the exception is raised.
    """
    ...

這種結構化方法增強了可讀性,並幫助工具提取有用的元數據。值得注意的是,第一行應提供函數用途的簡要概述,因為某些工具僅提取此初始行進行摘要。

單行文檔字元串非常適合簡單的函數或方法,其中一行就足以描述目的。

def add(x, y):
    """Add two numbers and return the result."""
    return x + y

可以使用其內置的 help() 函數或 __doc__ 屬性來訪問文檔。

help(add) # or example.__doc__
add.__doc__ # or example.__doc__

通過遵守這些實踐,Python 開發人員可以創建文檔齊全、可維護的代碼,從而簡化新貢獻者的開發和入門流程。

doctest:在文檔中進行測試

Python 中的 doctest 模塊允許您將代碼作為其文檔的一部分進行測試,這使其成為快速驗證示例和確保您的文檔準確的便捷而強大的工具。通過在文檔字元串中嵌入可測試的代碼示例, doctest 會運行這些示例以確認它們按描述工作。這有助於防止文檔中的代碼腐爛,因為示例與實際代碼行為不一致。

doctest的工作原理

要使用 doctest,只需在函數、方法或模塊文檔字元串中以 Python 互動式會話的形式添加示例。每個示例都以 >>>(Python REPL 提示符)開頭,預期輸出緊隨其後。當 doctest 運行時,它會將實際輸出與預期輸出進行比較,並標記任何不匹配。

def add(a: int, b: int) -> int:
    """
    Calculate the sum of two numbers.
  
    Example:
    >>> add(2, 3)
    5
    >>> add(-1, 1)
    0
    >>> add(4.5, 1.5)
    6.0
    """
    return a + b

當您運行 doctest 時,它將執行文檔字元串中的代碼並驗證結果是否匹配。您可以從命令行在此腳本上調用 doctest

python -m doctest <filename>.py

或者,您可以在腳本中添加 doctest.testmod() 以在模塊作為腳本執行時自動運行測試:

if __name__ == "__main__":
    import doctest
    doctest.testmod()

雖然 doctest 很方便,但它並不能完全替代更廣泛的測試框架,例如 unittestpytest 。它最適合沒有複雜設置、拆解或高級斷言的簡單情況。它還可能難以處理略有不同的輸出(如浮點結果或非確定性輸出)。

請參閱 add 函數的綜合文檔以了解
有關 DocString 中附加的有關其用法的更多信息。

def add(a, b):
    """
    Calculate the sum of two numbers.

    This function takes two numeric inputs, `a` and `b`, and returns their sum.
    
    It is suitable for integers and floating-point numbers.
    
    Parameters:
      a (int or float): The first number to add.
      b (int or float): The second number to add.
    
    Returns:
      int or float: The sum of `a` and `b`.
    
    Example:
    >>> add(2, 3)
    5
    >>> add(-1, 1)
    0
    >>> add(4.5, 1.5)
    6.0
    """
    return a + b

doctest 合併到您的工作流程中可以使您的代碼更可靠,文檔更值得信賴,從而使其他人能夠有效地理解和驗證代碼行為。

推導式

Python 推導式是以簡潔、可讀的方式創建和操作數據的強大工具。此技術允許您直接從其他序列構建序列(如列表、字典或集),所有這些都在一行代碼中完成。與使用 Loop 相比,這可能是一個顯著的改進。

列表推導式

列表推導式是最常見的類型,通常用於基於現有列表或範圍創建列表。

創建 0 到 9 的方格列表的示例 hwo:

# Syntax: [expression for item in iterable if condition]

squares = [x**2 for x in range(10)]
# Output: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

上面的推導式從 range(10) 中取出每個數字,將其平方,並將其添加到 squares 列表中。您還可以包含條件語句來篩選元素。

如何添加條件以僅包含偶數個方塊的示例:

even_squares = [x**2 for x in range(10) if x % 2 == 0]
# Output: [0, 4, 16, 36, 64]

這允許您以高度可讀的方式創建篩選和轉換的列表。

詞典推導

字典推導式對於從序列動態創建字典非常有用。語法類似於列表推導式,但使用鍵值結構。

創建 0 到 9 的平方字典的示例 hwo:

# Syntax: {key_expression: value_expression for item in iterable if condition}

squares_dict = {x: x**2 for x in range(10)}
# Output: {0: 0, 1: 1, 2: 4, 3: 9, ..., 9: 81}

您還可以像對待列表推導式一樣將條件應用於字典推導式。

集合推導式

集合推導式的工作方式與列表推導式類似,但生成的是集合而不是列表。集是無序的,會自動刪除重複值,因此當您需要唯一的結果時,這非常有用。

如何為數字 0 到 9 創建一組正方形的示例:

# Syntax: {expression for item in iterable if condition}

squares_set = {x**2 for x in range(10)}
# Output: {0, 1, 4, 9, 16, 25, 36, 49, 64, 81}

您還可以像對待列表推導式一樣將條件應用於字典推導式。

生成器推導式

生成器推導式類似於列表推導式,但創建的是生成器而不是列表。生成器一次生成一個項目,並且僅在需要時生成,從而使它們具有內存效率,尤其是對於大型數據集。如果您只需要迭代一次數據,或者數據集太大而無法一次全部放入內存,這將特別有用。

生成器推導式的語法使用括弧 () 而不是方括弧 [] 或大括弧 {}

如何為數字 0 到 9 的平方創建生成器的示例:

# Syntax: (expression for item in iterable if condition)


squares_gen = (x**2 for x in range(10))

在此示例中,squares_gen 是一個生成器對象,僅當迭代每個正方形時,它才會生成每個正方形。

for square in squares_gen:
    print(square)

# Output: 0, 1, 4, 9, 16, 25, 36, 49, 64, 81

但是,請記住,生成器推導式只能迭代一次。如果需要多次訪問元素,則列表推導式可能更合適。

科技分類資訊推薦

iPhone一鍵降溫?蘋果這隱藏模式有點過分啊 - 天天要聞

iPhone一鍵降溫?蘋果這隱藏模式有點過分啊

為了解決發熱這亘古難題,手機廠商絞盡腦汁,往手機里塞散熱膜、均熱板、填充硅脂,甚至還用上了主動風扇。 但到了夏天三四十度的室外,該發熱還是發熱,該燙手還是燙手。 國產安卓如此。 ....
三星Galaxy S26Ultra不裝了,性能太炸裂了! - 天天要聞

三星Galaxy S26Ultra不裝了,性能太炸裂了!

三星Galaxy S26 Ultra即將亮相,帶來多方面升級。·該機型將採用6.9英寸QHD+LTPO AMOLED顯示屏,支持120Hz自適應刷新率和3000尼特峰值亮度,確保在各種光照條件下都能提供清晰的視覺體驗。
中集洋山集裝箱第三季度訂單飽滿 開拓氫能集成裝備求新|公司調研 - 天天要聞

中集洋山集裝箱第三季度訂單飽滿 開拓氫能集成裝備求新|公司調研

財聯社7月5日訊(記者 胡皓瓊)中美關稅緩和之下,外貿企業對美出貨恢復,帶動中集洋山集裝箱製造訂單增長。集裝箱製造廠在提升自動化水平的同時,為提高自身抗風險能力,還正布局新賽道。財聯社記者近日走訪中集集團(000039.SZ)旗下中集洋山,眼見一片片鋼板,經歷衝壓、焊接組裝、打砂等一道道工序,逐漸成形。產線上布...
數據寶一體機實機首秀2025生態文明貴陽國際論壇 - 天天要聞

數據寶一體機實機首秀2025生態文明貴陽國際論壇

7月5日至6日,2025年生態文明貴陽國際論壇召開,數據寶攜其AI技術領先成果重磅亮相論壇人工智慧展區,並以「企業私域業務模型一體機」實機首秀,現場演繹數據資產與AI深度賦能綠色發展的創新融合實踐。數據寶「企業私域業務模型一體機」。
登上C909樣機,聽聽中國商飛工程總師怎麼說?《明青講習所》又上新了 - 天天要聞

登上C909樣機,聽聽中國商飛工程總師怎麼說?《明青講習所》又上新了

名師金課《明青講習所》今又上新,這期節目《「科學家精神」的迴響》聚焦於「科學家精神的時代傳承」,定於7月5日(周六)19:30 在上海教育電視台首播。陳明青老師帶領華東師範大學第一附屬中學、上海市魯迅中學、上海南湖職業技術學院的學生們,踏上沉浸式學習之旅,走進錢學森圖書館、中國商飛上海飛機設計研究院、上海科...