自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

提高Python代碼可讀性的五個(gè)基本技巧

譯文 精選
開(kāi)發(fā) 前端
Python中有許多方法可以幫助我們理解代碼的內(nèi)部工作方式,因此當(dāng)您從頭來(lái)看代碼或者寫(xiě)代碼時(shí),應(yīng)該會(huì)更容易地從停止的地方繼續(xù)下去。

譯者 | 趙青窕

審校 | 孫淑娟

你是否經(jīng)?;仡^看看6個(gè)月前寫(xiě)的代碼,想知道這段代碼底是怎么回事?或者從別人手上接手項(xiàng)目,并且不知道從哪里開(kāi)始?這樣的情況對(duì)開(kāi)發(fā)者來(lái)說(shuō)是比較常見(jiàn)的。Python中有許多方法可以幫助我們理解代碼的內(nèi)部工作方式,因此當(dāng)您從頭來(lái)看代碼或者寫(xiě)代碼時(shí),應(yīng)該會(huì)更容易地從停止的地方繼續(xù)下去。

在此我給大家舉個(gè)例子,我們可能會(huì)得到如下圖所示的代碼。這還不是最糟糕的,但有一些事情需要我們?nèi)ゴ_認(rèn),例如:

  • 在load_las_file函數(shù)中f和d代表什么?
  • 為什么我們要在clay函數(shù)中檢查結(jié)果?
  • 這些函數(shù)需要的是什么類(lèi)型?浮點(diǎn)數(shù)還是DataFrames?

圖片

在本文中,我將介紹如何通過(guò)文檔、提示輸入和適當(dāng)?shù)淖兞棵Q(chēng)來(lái)提高應(yīng)用/腳本的可讀性的5個(gè)基本技巧。

1.注釋 

我們可以對(duì)代碼做的第一件事是向某些行添加注釋?zhuān)且⒁獗苊庾⑨尩眠^(guò)多。注釋中需要闡述代碼為什么能起作用,或者為什么某些事情要以某種方式完成,而不是它是如何實(shí)現(xiàn)的。Python中的注釋通常使用井號(hào)(#)來(lái)完成,可以跨一行也可以跨多行。

# Comment using the hashtag
# Another comment using the hashtag

對(duì)于多行注釋?zhuān)覀円部梢允褂秒p引號(hào)。

"""
This is an example of
a multi-line comment
"""

在下面的示例中,代碼中添加了一些注釋?zhuān)越忉屇承┐a行的工作流程和原因:

圖片

2.顯式類(lèi)型 

Python語(yǔ)言是動(dòng)態(tài)類(lèi)型的,這意味著變量類(lèi)型只會(huì)在運(yùn)行時(shí)被檢查。此外,變量可以在代碼執(zhí)行期間更改類(lèi)型。另一方面,靜態(tài)類(lèi)型涉及顯式地聲明變量類(lèi)型,并且在代碼執(zhí)行期間不能更改。

2014年,PEP 484引入了類(lèi)型提示的概念,隨后這個(gè)概念引入到了Python 3.5版本中。這允許您顯式地聲明變量類(lèi)型。通過(guò)添加類(lèi)型提示,可以顯著提高代碼的可讀性。在下面的例子中,我們可以看出:

  • 需要兩個(gè)參數(shù)
  • 參數(shù)filename的類(lèi)型是字符串
  • 參數(shù)start_depth的類(lèi)型是float類(lèi)型,同時(shí)該參數(shù)默認(rèn)值為None
  • 該函數(shù)將返回一個(gè)pandas DataFrame對(duì)象

圖片

根據(jù)類(lèi)型提示,我們可以確切地知道函數(shù)需要什么,以及它將返回什么。

3.文檔字符串 

文檔字符串是緊跟在函數(shù)或類(lèi)定義之后的字符串。文檔字符串是一種很好的方式,可以詳細(xì)解釋函數(shù)的功能、需要什么參數(shù)、將引發(fā)的異常、返回值等等。此外,如果使用Sphinx之類(lèi)的工具為代碼創(chuàng)建在線文檔,文檔字符串將自動(dòng)提取并轉(zhuǎn)換為適當(dāng)?shù)奈臋n。下面的示例顯示了名為clay_volume的函數(shù)對(duì)應(yīng)的文檔字符串。這里我們可以指明每個(gè)參數(shù)的含義。這使它比基本的類(lèi)型提示更詳細(xì)。您還可以包含更多關(guān)于函數(shù)背后的方法論的信息,如學(xué)術(shù)參考資料或方程。

圖片

當(dāng)我們?cè)诖a的其他地方調(diào)用函數(shù)時(shí),文檔字符串也是非常有幫助。例如,使用Visual  Studio編寫(xiě)代碼時(shí),可以將鼠標(biāo)懸停在函數(shù)調(diào)用上,然后看到一個(gè)彈出窗口,顯示函數(shù)的功能及其需求。

圖片

如果您使用Visual Studio Code (VS Code)編輯您的Python代碼,您可以使用autoDocstring這樣的擴(kuò)展從而使創(chuàng)建文檔字符串的過(guò)程更容易。您可以輸入三個(gè)雙引號(hào),并自動(dòng)填充模板的其余部分。你只需要填上細(xì)節(jié)。

圖片

提示:如果您已經(jīng)在參數(shù)中聲明了類(lèi)型,那么它們將被自動(dòng)選取。

4.具有可讀性的變量名 

有時(shí)候,當(dāng)你在寫(xiě)代碼的時(shí)候,你不會(huì)太在意變量的名稱(chēng),特別是當(dāng)時(shí)間比較緊張的時(shí)候。但是,如果您返回看代碼時(shí),會(huì)發(fā)現(xiàn)一系列名為x1或var123的變量,您可能無(wú)法一眼理解它們表示什么。在下面的例子,有兩個(gè)變量f和d。我們可以通過(guò)查看代碼的其他部分來(lái)猜測(cè)這類(lèi)變量的含義,但這可能會(huì)花費(fèi)時(shí)間,尤其是在代碼很長(zhǎng)的情況下。

圖片

如果我們?yōu)檫@些變量指定適當(dāng)?shù)拿Q(chēng),我們將能夠知道其中一個(gè)變量是由lasio.read()調(diào)用讀取的data_file,并且很可能是原始數(shù)據(jù)。data變量告訴我們這是我們正在處理的實(shí)際數(shù)據(jù)。

圖片

5.避免魔法數(shù)字 

幻數(shù)是代碼中的值,它們背后有一個(gè)無(wú)法解釋的含義,可以是常量。在代碼中使用這些可能會(huì)導(dǎo)致歧義,尤其是不熟悉計(jì)算中使用數(shù)字的情況。此外,如果我們?cè)诙鄠€(gè)地方有相同的神奇數(shù)字,當(dāng)需要更新它,我們必須更新它的每個(gè)實(shí)例。然而,如果給這類(lèi)數(shù)字分配一個(gè)合適的命名變量,那替換的過(guò)程就會(huì)容易得多。在下面的例子中,我們有一個(gè)函數(shù),它計(jì)算一個(gè)名為result的值,并將其乘以0.6。這是什么意思?它是一個(gè)轉(zhuǎn)換因子嗎?一個(gè)標(biāo)量嗎?

圖片

如果我們聲明一個(gè)變量并將該值賦給它,那么我們就更有可能知道它是什么。在這種情況下,將伽馬射線指數(shù)轉(zhuǎn)換為粘土體積所用的是粘土與頁(yè)巖的比值。

圖片

6.最終代碼 

在應(yīng)用了上面的技巧之后,我們的最終代碼現(xiàn)在看起來(lái)更清晰,更容易理解。

圖片

7.總結(jié) 

通過(guò)注釋和文檔字符串向代碼添加說(shuō)明有助于幫助您和其他人理解代碼正在做什么。一開(kāi)始可能會(huì)覺(jué)得這是一件苦差事,但隨著工具的使用和定期的練習(xí),它會(huì)成為你的第二天性。

原文鏈接:https://towardsdatascience.com/5-essential-tips-to-improve-the-readability-of-your-python-code-a1d5e62a4bf0

譯者介紹

趙青窕,51CTO社區(qū)編輯,從事多年驅(qū)動(dòng)開(kāi)發(fā)。研究興趣包含安全OS和網(wǎng)絡(luò)安全領(lǐng)域,發(fā)表過(guò)網(wǎng)絡(luò)相關(guān)專(zhuān)利。

責(zé)任編輯:武曉燕 來(lái)源: 51CTO技術(shù)棧
相關(guān)推薦

2022-08-23 14:57:43

Python技巧函數(shù)

2017-10-30 15:22:29

代碼可讀性技巧

2024-10-11 06:00:00

Python代碼編程

2019-06-06 08:48:14

代碼函數(shù)編程語(yǔ)言

2021-12-08 23:38:25

Python工具代碼

2023-10-30 18:05:55

Python類(lèi)型

2010-09-02 10:43:24

CSS文件

2014-07-28 10:28:25

程序員

2014-07-29 09:55:33

程序員代碼可讀性

2022-11-04 11:18:16

代碼優(yōu)化可讀性

2024-10-07 10:00:00

Python代碼編碼

2021-10-09 10:24:53

Java 代碼可讀性

2021-04-01 16:43:05

代碼可讀性開(kāi)發(fā)

2024-08-02 16:20:06

2023-07-07 07:43:37

AutoMapper映射庫(kù)

2015-08-27 13:11:18

JavaScript代碼

2024-04-23 08:01:20

面向?qū)ο?/a>C 語(yǔ)言代碼

2017-11-23 10:59:17

程序員代碼編程

2020-11-08 14:36:27

pandas數(shù)據(jù)分析pipe()

2019-12-03 09:32:32

JavaScript代碼開(kāi)發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)