日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
3大利器推薦,幫你寫(xiě)出規(guī)范漂亮的Python代碼

Python學(xué)了好久,但是拿出來(lái)review的代碼好像總是長(zhǎng)的不夠俊美,不夠工整!因此標(biāo)準(zhǔn)化的代碼規(guī)范就顯得尤為重要。今天就來(lái)推薦3個(gè)利器,python界廣泛認(rèn)同的代碼風(fēng)格規(guī)范PEP8和兩個(gè)超牛的工具pylint和black,分別用于代碼風(fēng)格規(guī)范檢測(cè)和自動(dòng)優(yōu)化。

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、新巴爾虎左網(wǎng)絡(luò)推廣、小程序定制開(kāi)發(fā)、新巴爾虎左網(wǎng)絡(luò)營(yíng)銷、新巴爾虎左企業(yè)策劃、新巴爾虎左品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供新巴爾虎左建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com

1、代碼風(fēng)格規(guī)范PEP8

首先講一講為什么要使用PEP8,我們先來(lái)看下面這段代碼,在相關(guān)函數(shù)定義后,它是可以正常編譯執(zhí)行的,但是這段代碼的怪異風(fēng)格無(wú)論是讓別人閱讀還是自己閱讀都會(huì)感到很難受。這就需要一種普遍認(rèn)同的代碼風(fēng)格規(guī)范,對(duì)行長(zhǎng)度、縮進(jìn)、多行表達(dá)式、變量命名約定等內(nèi)容進(jìn)行統(tǒng)一,這就是PEP8的意義所在。 

需要說(shuō)明的是,PEP 8中有一些規(guī)范是為了方便閱讀,而有一些規(guī)范實(shí)實(shí)在在地影響著代碼的性能、容錯(cuò)率或者重構(gòu)難度。 

比如上面這段代碼,foo函數(shù)僅在滿足條件的情況下有返回值、bar函數(shù)僅在不滿足條件的情況下有返回值,這樣的代碼兼容性會(huì)比較差,正確的做法是保持代碼一致性,函數(shù)中的返回語(yǔ)句都應(yīng)該返回一個(gè)表達(dá)式,或者都不返回: 

關(guān)于PEP8就簡(jiǎn)單介紹到這里,有興趣的朋友可以自行查閱文檔。當(dāng)我們打開(kāi)文檔的時(shí)候會(huì)發(fā)現(xiàn)PEPE 8規(guī)范的內(nèi)容非常多、非常細(xì)。

作為一名新手如果要一條條解讀、一條條記住這些規(guī)定實(shí)在不是件容易的事情。然而養(yǎng)成良好的代碼編寫(xiě)習(xí)慣對(duì)新手來(lái)說(shuō)又是十分重要的。

下面我們就正式進(jìn)入主題,介紹兩個(gè)簡(jiǎn)單又實(shí)用的代碼自動(dòng)化檢測(cè)和優(yōu)化工具,可以幫助我們快速規(guī)范自己的代碼風(fēng)格。

2、自動(dòng)檢測(cè)工具Pylint

Pylint 是一個(gè)檢查違反 PEP8 規(guī)范和常見(jiàn)錯(cuò)誤的庫(kù),它會(huì)自動(dòng)查找不符合代碼風(fēng)格標(biāo)準(zhǔn)和有潛在問(wèn)題的代碼,并在控制臺(tái)輸出代碼中違反規(guī)范和出現(xiàn)問(wèn)題的相關(guān)信息。

1).安裝與使用

與python的其他庫(kù)一樣,直接 pip install pylint 即可完成安裝,另外anaconda自帶pylint,所以如果安裝過(guò)anaconda不必再單獨(dú)安裝此庫(kù)。

pylint的使用也非常簡(jiǎn)單,最基本的用法直接在控制臺(tái)輸入 pylint 路徑/模塊名 即可對(duì)相關(guān)模塊的代碼風(fēng)格規(guī)范 進(jìn)行檢查,檢查結(jié)果會(huì)在控制臺(tái)輸出。

建議結(jié)合 pylint --help 的提示進(jìn)行學(xué)習(xí)和檢索。介紹完pylint的基本情況,我們來(lái)結(jié)合一個(gè)實(shí)例進(jìn)行詳細(xì)說(shuō)明。

2).實(shí)例演示說(shuō)明

這里我找了自己剛學(xué)python時(shí)寫(xiě)的一段代碼進(jìn)行測(cè)試: 

  
 
 
  1. import pandas as pd 
  2.  
  3. data = [] 
  4. char_replace_dict = {':':'  ', '(':'(', ')':')', ',':','} 
  5.  
  6. with open('xmq_survey.txt', 'r', encoding = 'utf-8') as file: 
  7.  for line in file.readlines(): 
  8.    for key, value in char_replace_dict.items(): 
  9.      line = line.replace(key, value)#原來(lái)這個(gè)是深度引用 
  10.      #這條代碼比自己寫(xiě)的簡(jiǎn)介的多,也更python 
  11.    data.append(line) 
  12.  
  13. with open('survey.txt', 'w', encoding = 'utf-8') as file: 
  14.  for line in data: 
  15.    file.write(line) 
  16.  
  17. raw_data = pd.read_table('survey.txt', delimiter = '    ', header = None) #查看read_table函數(shù)的用法 
  18. raw_data.columns = ['Name', 'Raw Info'] 
  19. raw_data.count() 
  20. print('successful') 

乍一看好像沒(méi)什么大問(wèn)題,但是經(jīng)過(guò)pylint檢查后卻給出了一堆問(wèn)題提示(下圖),我們來(lái)看檢查結(jié)果,每行以大寫(xiě)字母+冒號(hào)開(kāi)頭的信息都是一處反饋提示。 

其中開(kāi)頭的大寫(xiě)字母表示錯(cuò)誤類型(主要有CRWEF幾類);以逗號(hào)間隔的兩個(gè)數(shù)字表示發(fā)現(xiàn)問(wèn)題的位置(行和列);其后是對(duì)問(wèn)題的具體描述,括號(hào)里的內(nèi)容稱為message id,可以簡(jiǎn)單理解為錯(cuò)誤類型的詳細(xì)分類,通過(guò)

pylint --help-msg=  指令可以查看這個(gè)問(wèn)題的的詳細(xì)信息 。

C——違反代碼風(fēng)格標(biāo)準(zhǔn);

R——代碼結(jié)構(gòu)較差;

W——關(guān)于細(xì)節(jié)的警告;

E——代碼中存在錯(cuò)誤;

F——導(dǎo)致Pylint無(wú)法繼續(xù)運(yùn)行的錯(cuò)誤。

例如,我們執(zhí)行 pylint --help-msg=trailing-newlines 指令,會(huì)在控制臺(tái)輸出對(duì) trailing-newlines 這種問(wèn)題的詳細(xì)描述: 

pylint輸出的***一行是其對(duì)本次檢測(cè)的評(píng)分,滿分為10分,可以看到我的代碼本次評(píng)分為0分T_T。

既然知道了自己的代碼哪里不規(guī)范,就去針對(duì)性地改正吧,根據(jù)提示結(jié)果首先將函數(shù)參數(shù)賦值 = 兩邊的空格去掉,再將多余的空行去掉,然后運(yùn)行一下pylint再次進(jìn)行檢測(cè),得到如下結(jié)果: 

可以看到,剛才修改過(guò)的代碼相關(guān)問(wèn)題提示已經(jīng)沒(méi)有了,評(píng)分也從0分提高到了3.33分。但是仍然有很多問(wèn)題,這里就要注意了,PEP8并不是要***遵守的,當(dāng)遵循PEP 8規(guī)范會(huì)使代碼可讀性變差、會(huì)跟周圍代碼風(fēng)格不一致的時(shí)候,還是要遵循自己的判斷。

這種情況下,pylint也提供了一種操作,可以手動(dòng)屏蔽某些問(wèn)題提示,以剛才的代碼為例,剩下的幾個(gè)問(wèn)題主要是因?yàn)槭褂昧薚ab鍵、變量命名不規(guī)范、缺少文檔說(shuō)明造成的,我們可以使用

pylint --disable=mixex-indentation,invalid-name,missing-docstring 模塊名稱 命令對(duì)相關(guān)規(guī)范進(jìn)行屏蔽重新檢測(cè),發(fā)現(xiàn)問(wèn)題提示全部消除,評(píng)分也提升到了10分。

一段20行的代碼就檢測(cè)到如此之多的問(wèn)題提示,雖然手動(dòng)修改代碼有助于對(duì)PEP 8規(guī)范的學(xué)習(xí),但當(dāng)項(xiàng)目文件比較多、腳本代碼很長(zhǎng)的時(shí)候,實(shí)在是一個(gè)不小的工作量,因此就出現(xiàn)了能夠自動(dòng)優(yōu)化代碼風(fēng)格的工具。

3、自動(dòng)優(yōu)化工具Black

在眾多代碼格式化工具中,Black算是比較新的一個(gè),它***的特點(diǎn)是可配置項(xiàng)比較少,個(gè)人認(rèn)為這對(duì)于新手來(lái)說(shuō)是件好事,因?yàn)槲覀儾槐剡^(guò)多考慮如何設(shè)置Black,讓 Black 自己做決定就好。

1).安裝與使用

與pylint類似,直接pip install black即可完成該模塊的安裝,不過(guò)black依賴于Python 3.6+,但它仍然可以格式化Python2的代碼。

在使用方面black默認(rèn)讀取指定python文件并對(duì)其進(jìn)行代碼規(guī)范格式化,然后輸出到原文件。

  
 
 
  1. l = [1, 
  2.     2, 
  3.     3, 

例如,我們將上面這段代碼保存為test.py,然后在控制臺(tái)執(zhí)行 black test.py 指令,再次打開(kāi)test.py,發(fā)現(xiàn)其中的代碼變成了這個(gè)樣子: 

  
 
 
  1. l = [1, 2, 3] 

當(dāng)然,Black的封裝程度再高也是有自定義配置項(xiàng)的,例如使用--version查看版本、使用--help查看幫助信息、使用--diff將修改信息輸出到控制臺(tái)而不更改原文件,下面我們還是結(jié)合一個(gè)實(shí)例來(lái)進(jìn)行演示說(shuō)明。

2).實(shí)例演示說(shuō)明

這里我們?nèi)匀皇褂胮ylint部分的代碼進(jìn)行演示。通過(guò)上面的操作我們知道,對(duì)這段代碼直接使用pylint進(jìn)行測(cè)試會(huì)輸出很多問(wèn)題提示,并給出一個(gè)評(píng)分0?,F(xiàn)在我們首先使用black對(duì)其進(jìn)行格式化,得到以下代碼: 

  
 
 
  1. # -*- coding:utf-8 -*- 
  2.  
  3. import pandas as pd 
  4.  
  5. data = [] 
  6. char_replace_dict = {':':'  ', '(':'(', ')':')', ',':','} 
  7.  
  8. with open('xmq_survey.txt', 'r', encoding = 'utf-8') as file: 
  9.  for line in file.readlines(): 
  10.    for key, value in char_replace_dict.items(): 
  11.      line = line.replace(key, value)#原來(lái)這個(gè)是深度引用 
  12.      #這條代碼比自己寫(xiě)的簡(jiǎn)介的多,也更python 
  13.    data.append(line) 
  14.  
  15. with open('survey.txt', 'w', encoding = 'utf-8') as file: 
  16.  for line in data: 
  17.    file.write(line) 
  18.  
  19. raw_data = pd.read_table('survey.txt', delimiter = '    ', header = None) #查看read_table函數(shù)的用法 
  20. raw_data.columns = ['Name', 'Raw Info'] 
  21. raw_data.count() 
  22. print('successful') 

可能看起來(lái)修改前后的代碼差異并不十分明顯,實(shí)質(zhì)上black已經(jīng)對(duì)代碼中參數(shù)賦值 = 兩端的空格、注釋的格式、制表符等進(jìn)行了替換和修改,我們使用pylint來(lái)進(jìn)行驗(yàn)證,執(zhí)行 pylint 模塊名稱 命令,得到如下結(jié)果: 

可以看到,相對(duì)于最初的文件,評(píng)分從0分提高到7.3分,輸出的問(wèn)題提示少了很多,剩余的問(wèn)題主要是缺少說(shuō)明文檔、變量命名不規(guī)范.black對(duì)于提高我們代碼規(guī)范性價(jià)比也是非常高的。

如果不想black直接對(duì)原文件進(jìn)行修改,而是想看看它對(duì)代碼中的哪些地方進(jìn)行了改動(dòng)的話,可以使用--diff參數(shù),執(zhí)行black --diff 文件名稱,black會(huì)將相關(guān)信息輸出到控制臺(tái)(下圖,其中-表示源代碼,+表示建議修改后的代碼),而不會(huì)對(duì)原文件進(jìn)行修改。 

  總之,black真的是一個(gè)非常好用的庫(kù),尤其對(duì)于新手來(lái)說(shuō),可以很方便地規(guī)范自己的代碼風(fēng)格。 


本文題目:3大利器推薦,幫你寫(xiě)出規(guī)范漂亮的Python代碼
路徑分享:http://www.5511xx.com/article/cdpojco.html