」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Python 最佳實務:編寫乾淨、有效率且可維護的程式碼

Python 最佳實務:編寫乾淨、有效率且可維護的程式碼

發佈於2024-11-06
瀏覽:782

Python Best Practices: Writing Clean, Efficient, and Maintainable Code

Python 因其简单性、可读性和多功能性而成为最流行的编程语言之一。

无论您是经验丰富的开发人员还是初学者,遵循 Python 最佳实践对于编写干净、高效和可维护的代码至关重要。

在这篇博文中,我们将探讨编写 Python 代码时要牢记的一些关键最佳实践。


1 - 遵守 PEP 8 指南

PEP 8 是 Python 代码的风格指南,提供了格式化和构建代码的约定。

PEP 8 的一些要点包括:

  • 缩进:每个缩进级别使用 4 个空格。
  • 行长度:将所有行限制为最多 79 个字符。
  • 空行:用两个空行分隔顶级函数和类定义,用一个空行分隔类内部的方法定义。
  • 导入:将导入放在文件顶部,按以下顺序分组:标准库导入、相关第三方导入和本地应用程序/库特定导入。

遵守 PEP 8 使您的代码更具可读性并与其他 Python 代码库保持一致。


2 - 编写描述性且简洁的变量名称

选择具有描述性且简洁的变量名称。

避免使用单字母变量,循环计数器等情况除外。
例如:

# Bad
a = 10

# Good
number_of_users = 10

描述性变量名称使您的代码不言自明,减少大量注释的需要,并使其他人(以及未来的您)更容易理解。


3 - 使用列表推导式和生成器表达式

列表推导式和生成器表达式提供了一种创建列表和生成器的简洁方法。

它们比使用循环更具可读性并且通常更快。

# List comprehension
squares = [x**2 for x in range(10)]

# Generator expression
squares_gen = (x**2 for x in range(10))

当结果列表足够小以适合内存时,列表推导式是最好的。

对较大的数据集使用生成器表达式以节省内存。


4 - 利用 Python 的内置函数和库

Python 的标准库非常庞大,使用内置函数通常比编写自定义代码更好。

例如,不要编写自己的函数来查找列表的最大值,而是使用 Python 的内置 max() 函数。

# Bad
def find_max(lst):
    max_val = lst[0]
    for num in lst:
        if num > max_val:
            max_val = num
    return max_val

# Good
max_val = max(lst)


使用内置函数和库可以节省时间并减少出错的可能性。


5 - 遵循 DRY 原则(不要重复自己)

避免重复代码。

如果您发现自己多次编写相同的代码,请考虑将其重构为函数或类。

这不仅可以减少代码库的大小,还可以使其更易于维护。

# Bad
def print_user_details(name, age):
    print(f"Name: {name}")
    print(f"Age: {age}")

def print_product_details(product, price):
    print(f"Product: {product}")
    print(f"Price: {price}")

# Good
def print_details(label, value):
    print(f"{label}: {value}")

DRY 原则带来更加模块化和可重用的代码。


6 - 使用虚拟环境

在处理 Python 项目时,尤其是有依赖项的项目时,最好使用虚拟环境。

虚拟环境允许您管理每个项目的依赖关系,避免不同项目中使用的包之间的冲突。

# 
Create a virtual environment
python -m venv myenv

# Activate the virtual environment
source myenv/bin/activate  # On Windows: myenv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

使用虚拟环境可确保项目的依赖项是隔离的并且易于重现。


7 - 编写单元测试

编写测试对于确保代码按预期工作以及防止更改时出现回归至关重要。

Python 的 unittest 模块是编写测试的一个很好的起点。

import unittest

def add(a, b):
    return a   b

class TestMathFunctions(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(2, 3), 5)
        self.assertEqual(add(-1, 1), 0)

if __name__ == '__main__':
    unittest.main()

在开发时定期运行测试可确保您的代码保持健壮且无错误。


8 - 使用有意义的注释和文档字符串

虽然干净的代码应该是不言自明的,但注释和文档字符串对于解释复杂的逻辑、假设和决策仍然很重要。

谨慎使用评论,关注你为什么做某事而不是你做了什么。

def calculate_discount(price, discount):
    """
    Calculate the price after applying the discount.

    Args:
    price (float): Original price
    discount (float): Discount percentage (0-100)

    Returns:
    float: Final price after discount
    """
    return price * (1 - discount / 100)

良好的注释和文档字符串可以提高代码的可维护性和可用性。


9 - 优雅地处理异常

Python 提供了强大的异常处理功能,应该用于优雅地管理错误。

不要让程序崩溃,请使用 try 和 except 块来处理潜在的错误。

try:
    with open('data.txt', 'r') as file:
        data = file.read()
except FileNotFoundError:
    print("File not found. Please check the file path.")
except Exception as e:
    print(f"An unexpected error occurred: {e}")

正确处理异常可确保您的程序能够处理意外情况而不会崩溃。


10 - 保持代码模块化

模块化代码更容易理解、测试和维护。

将代码分解为更小的、可重用的函数和类。

每个函数或类应该有一个职责。

# Bad
def process_data(data):
    # Load data
    # Clean data
    # Analyze data
    # Save results

# Good
def load_data(path):
    pass

def clean_data(data):
    pass

def analyze_data(data):
    pass

def save_results(results):
    pass

模块化增强了代码清晰度和可重用性,使其更易于调试和扩展。


结论

通过遵循这些 Python 最佳实践,您可以编写干净、高效且可维护的代码。

无论您是编写小脚本还是开发大型应用程序,这些原则都将帮助您创建更好、更专业的 Python 代码。

请记住,编码不仅仅是让事情正常运转;而是让事情顺利进行。这是为了让它们在现在和将来都能很好地工作。

版本聲明 本文轉載於:https://dev.to/devasservice/python-best-practices-writing-clean-efficient-and-maintainable-code-34bj?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何在Python中高效比較字典中相等的鍵值對?
    如何在Python中高效比較字典中相等的鍵值對?
    比較字典是否相等的鍵值對在Python中,比較字典以檢查鍵值對是否相等是一項常見任務。一種方法是迭代字典並使用 zip 和 iteritems 方法比較每一對字典。然而,還有一些替代方法可以提供更好的程式碼優雅性。 其中一種方法是使用字典理解來建立僅包含共享鍵值對的新字典。代碼如下:shared_i...
    程式設計 發佈於2024-11-06
  • 如何在 PHP 中使用數組函數向左旋轉數組元素?
    如何在 PHP 中使用數組函數向左旋轉數組元素?
    在PHP 中向左旋轉數組元素在PHP 中旋轉數組,將第一個元素移動到最後一個元素並重新索引數組,可以使用PHP 的array_push() 和array_shift() 函數組合來實現。 PHP 函數:PHP 沒有專門用於旋轉的內建函數數組。但是,以下程式碼片段示範如何模擬所需的旋轉行為:$numb...
    程式設計 發佈於2024-11-06
  • 如何解決Java存取檔案時出現「系統找不到指定的路徑」錯誤?
    如何解決Java存取檔案時出現「系統找不到指定的路徑」錯誤?
    解決Java 中遇到「系統找不到指定的路徑」時的檔案路徑問題在Java 專案中,嘗試存取文字時遇到錯誤來自指定相對路徑的檔案。此錯誤是由於 java.io.File 類別無法定位指定路徑而產生的。 要解決此問題,建議從類別路徑中檢索文件,而不是依賴文件系統。透過這樣做,您可以消除相對路徑的需要,並確...
    程式設計 發佈於2024-11-06
  • Laravel 中的 defer() 函數如何運作?
    Laravel 中的 defer() 函數如何運作?
    Taylor Otwell 最近宣布了 Laravel 中的新函數 defer()。這只是對 defer() 函數如何運作以及使用它可能遇到的問題進行非常基本的概述。 找出問題 還記得您曾經需要從 API 獲取某些內容,然後在幕後執行一些用戶不關心但仍在等待的操作的路由嗎?是的,我們都至少經歷過一...
    程式設計 發佈於2024-11-06
  • 在 Python Notebook 中探索使用 PySpark、Pandas、DuckDB、Polars 和 DataFusion 的資料操作
    在 Python Notebook 中探索使用 PySpark、Pandas、DuckDB、Polars 和 DataFusion 的資料操作
    Apache Iceberg Crash Course: What is a Data Lakehouse and a Table Format? Free Copy of Apache Iceberg the Definitive Guide Free Apache Iceberg Crash ...
    程式設計 發佈於2024-11-06
  • Vue + Tailwind 和動態類
    Vue + Tailwind 和動態類
    我最近在做的一個專案使用了Vite、Vue和Tailwind。 使用自訂顏色一段時間後,我遇到了一些困惑。 在模板中添加和使用自訂顏色不是問題 - 使用 Tailwind 文件使該過程非常清晰 // tailwind.config.js module.exports = { theme:...
    程式設計 發佈於2024-11-06
  • 端對端(E 測試:綜合指南
    端對端(E 測試:綜合指南
    端到端测试简介 端到端(E2E)测试是软件开发生命周期的重要组成部分,确保整个应用程序流程从开始到结束都按预期运行。与专注于单个组件或几个模块之间交互的单元或集成测试不同,端到端测试从用户的角度验证整个系统。这种方法有助于识别应用程序不同部分交互时可能出现的任何问题,确保无缝且无错误的用户体验。 ...
    程式設計 發佈於2024-11-06
  • 可以在 Go 結構標籤中使用變數嗎?
    可以在 Go 結構標籤中使用變數嗎?
    在Go 結構體標籤中嵌入變數Go 的結構體標籤通常用於註釋和元數據,通常涉及簡單的字符串文字。但是,使用者可能會遇到在這些標籤中需要動態或計算值的情況。 考慮以下結構,其中帶有為 JSON 封送註解的「類型」欄位:type Shape struct { Type string `json:&...
    程式設計 發佈於2024-11-06
  • 如何增強 Visual Studio 的建置詳細程度以實現深入洞察?
    如何增強 Visual Studio 的建置詳細程度以實現深入洞察?
    熟悉 Visual Studio 的建造詳細程度需要全面了解 Visual Studio 建置過程背後的複雜細節?別再猶豫了! 雖然使用 vcbuild 不會產生所需的詳細輸出,但 Visual Studio 的設定中隱藏著一個解決方案。採取以下簡單步驟即可解鎖大量資訊:導覽至 Visual Stu...
    程式設計 發佈於2024-11-06
  • 開發者日記# 誰寫的?
    開發者日記# 誰寫的?
    有個想法困擾著我。也許,我們無法識別它,但日復一日,我們周圍越來越多的人工智慧生成的內容。 LinkedIn 或其他平台上的有趣圖片、影片或貼文。我對帖子的媒體內容沒有疑問(很容易識別它何時生成、從庫存中獲取或創建),但我對帖子的內容表示懷疑。幾乎每次我讀一篇文章時,我都會想這是誰寫的?是作者分享了...
    程式設計 發佈於2024-11-06
  • 哪一種方法計算資料庫行數較快:PDO::rowCount 或 COUNT(*)?
    哪一種方法計算資料庫行數較快:PDO::rowCount 或 COUNT(*)?
    PDO::rowCount 與COUNT(*) 效能在資料庫查詢中計算行數時,選擇使用PDO:: rowCount 和COUNT(*) 會顯著影響效能。 PDO::rowCountPDO::rowCount 傳回受最後一個 SQL 語句影響的行數。但是,對於 SELECT 語句,某些資料庫可能會傳回...
    程式設計 發佈於2024-11-06
  • PART# 使用 HTTP 進行大型資料集的高效能檔案傳輸系統
    PART# 使用 HTTP 進行大型資料集的高效能檔案傳輸系統
    让我们分解提供的HTML、PHP、JavaScript和CSS代码对于分块文件上传仪表板部分。 HTML 代码: 结构概述: Bootstrap for Layout:代码使用 Bootstrap 4.5.2 创建一个包含两个主要部分的响应式布局: 分块上传部分:用于...
    程式設計 發佈於2024-11-06
  • 比較:Lithe 與其他 PHP 框架
    比較:Lithe 與其他 PHP 框架
    如果您正在為下一個專案探索 PHP 框架,很自然會遇到 Laravel、Symfony 和 Slim 等選項。但是,是什麼讓 Lithe 與這些更強大、更知名的框架區分開來呢?以下是一些突出 Lithe 如何脫穎而出的注意事項。 1. 輕量級與性能 Lithe 的設計重點在於輕量級...
    程式設計 發佈於2024-11-06
  • 程式設計風格指南:編寫簡潔程式碼的實用指南
    程式設計風格指南:編寫簡潔程式碼的實用指南
    在过去的五年里,我一直在不断尝试提高我的编码技能,其中之一就是学习和遵循最推荐的编码风格。 本指南旨在帮助您编写一致且优雅的代码,并包含一些提高代码可读性和可维护性的建议。它的灵感来自于社区中最受接受的流行指南,但进行了一些修改以更适合我的喜好。 值得一提的是,我是一名全栈 JavaScript 开...
    程式設計 發佈於2024-11-06
  • 檢查類型是否滿足 Go 中的接口
    檢查類型是否滿足 Go 中的接口
    在Go中,開發人員經常使用介面來定義預期的行為,使程式碼靈活且健壯。但是如何確保類型真正實現接口,尤其是在大型程式碼庫中? Go 提供了一種簡單有效的方法來在編譯時驗證這一點,防止執行時間錯誤的風險並使您的程式碼更加可靠和可讀。 您可能看過類似的文法 var _ InterfaceName = ...
    程式設計 發佈於2024-11-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3