高通進(jìn)博會展示生態(tài)合作新篇章,從5G手機(jī)到XR、PC、汽車繼續(xù)見證5G+AI成長,進(jìn)博會全勤生高通確認(rèn)明年第八次參展來采銷直播間看京東11.11外設(shè)辦公總裁直播 11日14點(diǎn)準(zhǔn)時(shí)開播第七屆進(jìn)博會盤點(diǎn):高通攜手伙伴展示的驍龍8至尊版旗艦終端備受關(guān)注產(chǎn)業(yè)合作推動AI發(fā)展 高通孟樸:攜手伙伴共抓5G+AI新機(jī)遇進(jìn)博會看技術(shù)變化,從5G手機(jī)到AI終端,高通技術(shù)支持行業(yè)拓展    高通獲頒“2024新消費(fèi)創(chuàng)新案例”,5G-A推動數(shù)字消費(fèi)高質(zhì)量發(fā)展3G追趕,4G并行,5G趕超!高通孟樸進(jìn)博會談與中國伙伴合作歷程京東11.11巔峰28小時(shí)倒計(jì)時(shí) 爆款耳機(jī)音箱5折開搶手機(jī)內(nèi)卷下一站,AI Agent消息稱著名 AI 學(xué)者、天工智能首席科學(xué)家顏水成離開昆侖萬維昆侖萬維SkyReels AI短劇平臺將于12月10日在美國正式上線韓國今年進(jìn)口柴油車銷量預(yù)計(jì)跌破 1 萬輛,創(chuàng)近 17 年新低讓游戲黨一秒種草的大屏電視?海信這款百吋旗艦做到了!為用戶節(jié)省超120萬元 京東11.11攜手奔圖加速打印國產(chǎn)化進(jìn)程京東3C數(shù)碼“瘋狂星期一”驚喜放價(jià) TP-LINK攝像頭限時(shí)直降210元11月9日晚8點(diǎn)京東11.11火熱開啟!潮流配件9.9元起京東11.11最后一波Apple大放價(jià) iPhone 16 Pro系列持續(xù)加補(bǔ)1600元2024 ROG DAY狂歡啟航,ROG電競顯示器助力三大戰(zhàn)車燃爆鄭州站!來京東11.11一次性搞定視頻、音頻等APP會員充值 省錢又省心
  • 首頁 > 數(shù)據(jù)存儲頻道 > 數(shù)據(jù)庫頻道 > 軟件架構(gòu)

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

    2022年08月29日 11:06:03   來源:中文科技資訊

      譯者 | 趙青窕

      審校 | 孫淑娟

      你是否經(jīng)常回頭看看6個(gè)月前寫的代碼,想知道這段代碼底是怎么回事?或者從別人手上接手項(xiàng)目,并且不知道從哪里開始?這樣的情況對開發(fā)者來說是比較常見的。

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

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

      在load_las_file函數(shù)中f和d代表什么?

      為什么我們要在clay函數(shù)中檢查結(jié)果?

      這些函數(shù)需要的是什么類型?浮點(diǎn)數(shù)還是DataFrames?

      在load_las_file函數(shù)中f和d代表什么?

      為什么我們要在clay函數(shù)中檢查結(jié)果?

      這些函數(shù)需要的是什么類型?浮點(diǎn)數(shù)還是DataFrames?

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

      PART 01

      注釋

      我們可以對代碼做的第一件事是向某些行添加注釋,但是要注意避免注釋得過多。注釋中需要闡述代碼為什么能起作用,或者為什么某些事情要以某種方式完成,而不是它是如何實(shí)現(xiàn)的。

      Python中的注釋通常使用井號(#)來完成,可以跨一行也可以跨多行。

      # Comment using the hashtag

      # Another comment using the hashtag

      對于多行注釋,我們也可以使用雙引號。

      """

      This is an example of

      a multi-line comment

      """

      在下面的示例中,代碼中添加了一些注釋,以解釋某些代碼行的工作流程和原因:

      PART 02

      顯式類型

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

      2014年,PEP 484引入了類型提示的概念,隨后這個(gè)概念引入到了Python 3.5版本中。這允許您顯式地聲明變量類型。

      通過添加類型提示,可以顯著提高代碼的可讀性。在下面的例子中,我們可以看出:

      需要兩個(gè)參數(shù)

      參數(shù)filename的類型是字符串

      參數(shù)start_depth的類型是float類型,同時(shí)該參數(shù)默認(rèn)值為None

      該函數(shù)將返回一個(gè)pandas DataFrame對象

      需要兩個(gè)參數(shù)

      參數(shù)filename的類型是字符串

      參數(shù)start_depth的類型是float類型,同時(shí)該參數(shù)默認(rèn)值為None

      該函數(shù)將返回一個(gè)pandas DataFrame對象

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

      PART 03

      文檔字符串

      文檔字符串是緊跟在函數(shù)或類定義之后的字符串。文檔字符串是一種很好的方式,可以詳細(xì)解釋函數(shù)的功能、需要什么參數(shù)、將引發(fā)的異常、返回值等等。

      此外,如果使用Sphinx之類的工具為代碼創(chuàng)建在線文檔,文檔字符串將自動提取并轉(zhuǎn)換為適當(dāng)?shù)奈臋n。

      下面的示例顯示了名為clay_volume的函數(shù)對應(yīng)的文檔字符串。這里我們可以指明每個(gè)參數(shù)的含義。這使它比基本的類型提示更詳細(xì)。您還可以包含更多關(guān)于函數(shù)背后的方法論的信息,如學(xué)術(shù)參考資料或方程。

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

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

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

      PART 04

      具有可讀性的變量名

      有時(shí)候,當(dāng)你在寫代碼的時(shí)候,你不會太在意變量的名稱,特別是當(dāng)時(shí)間比較緊張的時(shí)候。但是,如果您返回看代碼時(shí),會發(fā)現(xiàn)一系列名為x1或var123的變量,您可能無法一眼理解它們表示什么。

      在下面的例子,有兩個(gè)變量f和d。我們可以通過查看代碼的其他部分來猜測這類變量的含義,但這可能會花費(fèi)時(shí)間,尤其是在代碼很長的情況下。

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

      PART 05

      避免魔法數(shù)字

      幻數(shù)是代碼中的值,它們背后有一個(gè)無法解釋的含義,可以是常量。在代碼中使用這些可能會導(dǎo)致歧義,尤其是不熟悉計(jì)算中使用數(shù)字的情況。此外,如果我們在多個(gè)地方有相同的神奇數(shù)字,當(dāng)需要更新它,我們必須更新它的每個(gè)實(shí)例。然而,如果給這類數(shù)字分配一個(gè)合適的命名變量,那替換的過程就會容易得多。

      在下面的例子中,我們有一個(gè)函數(shù),它計(jì)算一個(gè)名為result的值,并將其乘以0.6。這是什么意思?它是一個(gè)轉(zhuǎn)換因子嗎?一個(gè)標(biāo)量嗎?

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

      PART 06

      最終代碼

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

      PART 07

      總結(jié)

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

      文章內(nèi)容僅供閱讀,不構(gòu)成投資建議,請謹(jǐn)慎對待。投資者據(jù)此操作,風(fēng)險(xiǎn)自擔(dān)。

    即時(shí)

    新聞

    明火炊具市場:三季度健康屬性貫穿全類目

    奧維云網(wǎng)(AVC)推總數(shù)據(jù)顯示,2024年1-9月明火炊具線上零售額94.2億元,同比增加3.1%,其中抖音渠道表現(xiàn)優(yōu)異,同比有14%的漲幅,傳統(tǒng)電商略有下滑,同比降低2.3%。

    企業(yè)IT

    重慶創(chuàng)新公積金應(yīng)用,“區(qū)塊鏈+政務(wù)服務(wù)”顯成效

    “以前都要去窗口辦,一套流程下來都要半個(gè)月了,現(xiàn)在方便多了!”打開“重慶公積金”微信小程序,按照提示流程提交相關(guān)材料,僅幾秒鐘,重慶市民曾某的賬戶就打進(jìn)了21600元。

    3C消費(fèi)

    華碩ProArt創(chuàng)藝27 Pro PA279CRV顯示器,高能實(shí)力,創(chuàng)

    華碩ProArt創(chuàng)藝27 Pro PA279CRV顯示器,憑借其優(yōu)秀的性能配置和精準(zhǔn)的色彩呈現(xiàn)能力,為您的創(chuàng)作工作帶來實(shí)質(zhì)性的幫助,雙十一期間低至2799元,性價(jià)比很高,簡直是創(chuàng)作者們的首選。

    研究

    中國信通院羅松:深度解讀《工業(yè)互聯(lián)網(wǎng)標(biāo)識解析體系

    9月14日,2024全球工業(yè)互聯(lián)網(wǎng)大會——工業(yè)互聯(lián)網(wǎng)標(biāo)識解析專題論壇在沈陽成功舉辦。