提升Python程式碼可讀性的五個基本技巧
譯者| 趙青窕
審校| 孫淑娟
你是否經常回頭看看6個月前寫的程式碼,想知道這段程式碼底是怎麼回事?或者從別人手上接手項目,並且不知道從哪裡開始?這樣的情況對開發者來說是比較常見的。 Python中有許多方法可以幫助我們理解程式碼的內部工作方式,因此當您從頭來看程式碼或寫入程式碼時,應該會更容易從停止的地方繼續下去。
在此我給大家舉個例子,我們可能會得到如下圖的程式碼。這還不是最糟糕的,但有一些事情需要我們去確認,例如:
- 在load_las_file函數中f和d代表什麼?
- 為什麼我們要在clay函數中檢查結果?
- 這些函數需要的是什麼型別?浮點數還是DataFrames?
在本文中,我將介紹如何透過文件、提示輸入和適當的變數名稱來提高應用程式/腳本的可讀性的5個基本技巧。
1.註解
我們可以對程式碼做的第一件事是在某些行加上註釋,但要注意避免註解太多。註釋中需要闡述程式碼為什麼能起作用,或者為什麼某些事情要以某種方式完成,而不是它是如何實現的。 Python中的註解通常使用井號(#)來完成,可以跨一行也可以跨多行。
# Comment using the hashtag # Another comment using the hashtag
對於多行註釋,我們也可以使用雙引號。
""" This is an example of a multi-line comment """
在下面的範例中,程式碼中加入了一些註釋,以解釋某些程式碼行的工作流程和原因:
2.顯式型別
Python語言是動態型別的,這表示變數型別只會在執行時被檢查。此外,變數可以在程式碼執行期間更改類型。另一方面,靜態類型涉及明確地聲明變數類型,並且在程式碼執行期間不能更改。
2014年,PEP 484引入了類型提示的概念,隨後這個概念引入了Python 3.5版本。這允許您明確地聲明變數類型。透過新增類型提示,可以顯著提高程式碼的可讀性。在下面的範例中,我們可以看出:
- 需要兩個參數
- 參數filename的類型是字串
- #參數start_depth的類型是float類型,同時該參數預設值為None
- 該函數將傳回一個pandas DataFrame物件
#根據型別提示,我們可以確切地知道函數需要什麼,以及它將返回什麼。
3.文件字串
文件字串是緊接在函數或類別定義之後的字串。文件字串是一種很好的方式,可以詳細解釋函數的功能、需要什麼參數、將引發的異常、傳回值等等。此外,如果使用Sphinx之類的工具為程式碼建立線上文檔,則文件字串將自動提取並轉換為適當的文檔。下面的範例顯示了名為clay_volume的函數對應的文件字串。這裡我們可以指明每個參數的意思。這使它比基本的類型提示更詳細。您還可以包含更多關於函數背後的方法論的信息,例如學術參考資料或方程式。
當我們在程式碼的其他地方呼叫函數時,文件字串也是非常有幫助。例如,使用Visual Studio編寫程式碼時,可以將滑鼠懸停在函數呼叫上,然後看到一個彈出窗口,顯示函數的功能及其需求。
如果您使用Visual Studio Code (VS Code)編輯您的Python程式碼,您可以使用autoDocstring這樣的擴充功能從而使創建文件字串的過程更容易。您可以輸入三個雙引號,並自動填入範本的其餘部分。你只需要填上細節。
提示:如果您已經在參數中宣告了類型,那麼它們將會自動選取。
4.具有可讀性的變數名稱
有時候,當你在寫程式碼的時候,你不會太在意變數的名稱,特別是當時間比較緊張的時候。但是,如果您返回看程式碼時,會發現一系列名為x1或var123的變量,您可能無法一眼理解它們表示什麼。在下面的例子,有兩個變數f和d。我們可以透過查看程式碼的其他部分來猜測這類變數的含義,但這可能會花費時間,尤其是在程式碼很長的情況下。
如果我們為這些變數指定適當的名稱,我們將能夠知道其中一個變數是由lasio.read()呼叫讀取的data_file,並且很可能是原始數據。 data變數告訴我們這是我們正在處理的實際資料。
5.避免魔法數字
幻數是程式碼中的值,它們背後有一個無法解釋的意義,可以是常數。在程式碼中使用這些可能會導致歧義,尤其是不熟悉計算中使用數字的情況。此外,如果我們在多個地方有相同的神奇數字,當需要更新它,我們必須更新它的每個實例。然而,如果給這類數字分配一個合適的命名變量,那麼替換的過程就會容易得多。在下面的範例中,我們有一個函數,它計算一個名為result的值,並將其乘以0.6。這是什麼意思?它是一個轉換因子嗎?一個標量嗎?
#如果我們聲明一個變數並將該值賦給它,那麼我們就更有可能知道它是什麼。在這種情況下,將伽馬射線指數轉換為黏土體積所使用的是黏土與頁岩的比值。
6.最終程式碼
在應用了上面的技巧之後,我們的最終程式碼現在看起來更清晰,更容易理解。
7.總結
透過註解和文件字串向程式碼添加說明有助於幫助您和其他人理解程式碼正在做什麼。一開始可能會覺得這是一件苦差事,但隨著工具的使用和定期的練習,它會成為你的第二天性。
原文連結:https://towardsdatascience.com/5-essential-tips-to-improve-the-readability-of-your-python-code-a1d5e62a4bf0
#譯者介紹
趙青窕,51CTO社群編輯,從事多年驅動開發。研究興趣包含安全OS和網路安全領域,發表過網路相關專利。
以上是提升Python程式碼可讀性的五個基本技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

MySQL 有免費的社區版和收費的企業版。社區版可免費使用和修改,但支持有限,適合穩定性要求不高、技術能力強的應用。企業版提供全面商業支持,適合需要穩定可靠、高性能數據庫且願意為支持買單的應用。選擇版本時考慮的因素包括應用關鍵性、預算和技術技能。沒有完美的選項,只有最合適的方案,需根據具體情況謹慎選擇。

HadiDB:輕量級、高水平可擴展的Python數據庫HadiDB(hadidb)是一個用Python編寫的輕量級數據庫,具備高度水平的可擴展性。安裝HadiDB使用pip安裝:pipinstallhadidb用戶管理創建用戶:createuser()方法創建一個新用戶。 authentication()方法驗證用戶身份。 fromhadidb.operationimportuseruser_obj=user("admin","admin")user_obj.

MySQL Workbench 可以連接 MariaDB,前提是配置正確。首先選擇 "MariaDB" 作為連接器類型。在連接配置中,正確設置 HOST、PORT、USER、PASSWORD 和 DATABASE。測試連接時,檢查 MariaDB 服務是否啟動,用戶名和密碼是否正確,端口號是否正確,防火牆是否允許連接,以及數據庫是否存在。高級用法中,使用連接池技術優化性能。常見錯誤包括權限不足、網絡連接問題等,調試錯誤時仔細分析錯誤信息和使用調試工具。優化網絡配置可以提升性能

直接通過 Navicat 查看 MongoDB 密碼是不可能的,因為它以哈希值形式存儲。取回丟失密碼的方法:1. 重置密碼;2. 檢查配置文件(可能包含哈希值);3. 檢查代碼(可能硬編碼密碼)。

無法連接 MySQL 可能是由於以下原因:MySQL 服務未啟動、防火牆攔截連接、端口號錯誤、用戶名或密碼錯誤、my.cnf 中的監聽地址配置不當等。排查步驟包括:1. 檢查 MySQL 服務是否正在運行;2. 調整防火牆設置以允許 MySQL 監聽 3306 端口;3. 確認端口號與實際端口號一致;4. 檢查用戶名和密碼是否正確;5. 確保 my.cnf 中的 bind-address 設置正確。

MySQL 可在無需網絡連接的情況下運行,進行基本的數據存儲和管理。但是,對於與其他系統交互、遠程訪問或使用高級功能(如復制和集群)的情況,則需要網絡連接。此外,安全措施(如防火牆)、性能優化(選擇合適的網絡連接)和數據備份對於連接到互聯網的 MySQL 數據庫至關重要。

MySQL數據庫性能優化指南在資源密集型應用中,MySQL數據庫扮演著至關重要的角色,負責管理海量事務。然而,隨著應用規模的擴大,數據庫性能瓶頸往往成為製約因素。本文將探討一系列行之有效的MySQL性能優化策略,確保您的應用在高負載下依然保持高效響應。我們將結合實際案例,深入講解索引、查詢優化、數據庫設計以及緩存等關鍵技術。 1.數據庫架構設計優化合理的數據庫架構是MySQL性能優化的基石。以下是一些核心原則:選擇合適的數據類型選擇最小的、符合需求的數據類型,既能節省存儲空間,又能提升數據處理速度

作為數據專業人員,您需要處理來自各種來源的大量數據。這可能會給數據管理和分析帶來挑戰。幸運的是,兩項 AWS 服務可以提供幫助:AWS Glue 和 Amazon Athena。
