成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

3大利器推薦,幫你寫出規范漂亮的Python代碼

開發 后端
Python學了好久,但是拿出來review的代碼好像總是長的不夠俊美,不夠工整!因此標準化的代碼規范就顯得尤為重要。今天就來推薦3個利器,python界廣泛認同的代碼風格規范PEP8和兩個超牛的工具pylint和black,分別用于代碼風格規范檢測和自動優化。

Python學了好久,但是拿出來review的代碼好像總是長的不夠俊美,不夠工整!因此標準化的代碼規范就顯得尤為重要。今天就來推薦3個利器,python界廣泛認同的代碼風格規范PEP8和兩個超牛的工具pylint和black,分別用于代碼風格規范檢測和自動優化。

1、代碼風格規范PEP8

首先講一講為什么要使用PEP8,我們先來看下面這段代碼,在相關函數定義后,它是可以正常編譯執行的,但是這段代碼的怪異風格無論是讓別人閱讀還是自己閱讀都會感到很難受。這就需要一種普遍認同的代碼風格規范,對行長度、縮進、多行表達式、變量命名約定等內容進行統一,這就是PEP8的意義所在。 

 

需要說明的是,PEP 8中有一些規范是為了方便閱讀,而有一些規范實實在在地影響著代碼的性能、容錯率或者重構難度。 

 

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

 

關于PEP8就簡單介紹到這里,有興趣的朋友可以自行查閱文檔。當我們打開文檔的時候會發現PEPE 8規范的內容非常多、非常細。

作為一名新手如果要一條條解讀、一條條記住這些規定實在不是件容易的事情。然而養成良好的代碼編寫習慣對新手來說又是十分重要的。

下面我們就正式進入主題,介紹兩個簡單又實用的代碼自動化檢測和優化工具,可以幫助我們快速規范自己的代碼風格。

2、自動檢測工具Pylint

Pylint 是一個檢查違反 PEP8 規范和常見錯誤的庫,它會自動查找不符合代碼風格標準和有潛在問題的代碼,并在控制臺輸出代碼中違反規范和出現問題的相關信息。

1).安裝與使用

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

pylint的使用也非常簡單,最基本的用法直接在控制臺輸入 pylint 路徑/模塊名 即可對相關模塊的代碼風格規范 進行檢查,檢查結果會在控制臺輸出。

建議結合 pylint --help 的提示進行學習和檢索。介紹完pylint的基本情況,我們來結合一個實例進行詳細說明。

2).實例演示說明

這里我找了自己剛學python時寫的一段代碼進行測試: 

  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)#原來這個是深度引用 
  10.      #這條代碼比自己寫的簡介的多,也更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函數的用法 
  18. raw_data.columns = ['Name''Raw Info'
  19. raw_data.count() 
  20. print('successful'

乍一看好像沒什么大問題,但是經過pylint檢查后卻給出了一堆問題提示(下圖),我們來看檢查結果,每行以大寫字母+冒號開頭的信息都是一處反饋提示。 

 

其中開頭的大寫字母表示錯誤類型(主要有CRWEF幾類);以逗號間隔的兩個數字表示發現問題的位置(行和列);其后是對問題的具體描述,括號里的內容稱為message id,可以簡單理解為錯誤類型的詳細分類,通過

pylint --help-msg= 指令可以查看這個問題的的詳細信息 。

C——違反代碼風格標準;

R——代碼結構較差;

W——關于細節的警告;

E——代碼中存在錯誤;

F——導致Pylint無法繼續運行的錯誤。

例如,我們執行 pylint --help-msg=trailing-newlines 指令,會在控制臺輸出對 trailing-newlines 這種問題的詳細描述: 

 

pylint輸出的***一行是其對本次檢測的評分,滿分為10分,可以看到我的代碼本次評分為0分T_T。

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

 

可以看到,剛才修改過的代碼相關問題提示已經沒有了,評分也從0分提高到了3.33分。但是仍然有很多問題,這里就要注意了,PEP8并不是要***遵守的,當遵循PEP 8規范會使代碼可讀性變差、會跟周圍代碼風格不一致的時候,還是要遵循自己的判斷。

這種情況下,pylint也提供了一種操作,可以手動屏蔽某些問題提示,以剛才的代碼為例,剩下的幾個問題主要是因為使用了Tab鍵、變量命名不規范、缺少文檔說明造成的,我們可以使用

pylint --disable=mixex-indentation,invalid-name,missing-docstring 模塊名稱 命令對相關規范進行屏蔽重新檢測,發現問題提示全部消除,評分也提升到了10分。

一段20行的代碼就檢測到如此之多的問題提示,雖然手動修改代碼有助于對PEP 8規范的學習,但當項目文件比較多、腳本代碼很長的時候,實在是一個不小的工作量,因此就出現了能夠自動優化代碼風格的工具。

3、自動優化工具Black

在眾多代碼格式化工具中,Black算是比較新的一個,它***的特點是可配置項比較少,個人認為這對于新手來說是件好事,因為我們不必過多考慮如何設置Black,讓 Black 自己做決定就好。

1).安裝與使用

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

在使用方面black默認讀取指定python文件并對其進行代碼規范格式化,然后輸出到原文件。

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

例如,我們將上面這段代碼保存為test.py,然后在控制臺執行 black test.py 指令,再次打開test.py,發現其中的代碼變成了這個樣子: 

  1. l = [1, 2, 3] 

當然,Black的封裝程度再高也是有自定義配置項的,例如使用--version查看版本、使用--help查看幫助信息、使用--diff將修改信息輸出到控制臺而不更改原文件,下面我們還是結合一個實例來進行演示說明。

2).實例演示說明

這里我們仍然使用pylint部分的代碼進行演示。通過上面的操作我們知道,對這段代碼直接使用pylint進行測試會輸出很多問題提示,并給出一個評分0。現在我們首先使用black對其進行格式化,得到以下代碼: 

  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)#原來這個是深度引用 
  12.      #這條代碼比自己寫的簡介的多,也更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函數的用法 
  20. raw_data.columns = ['Name''Raw Info'
  21. raw_data.count() 
  22. print('successful'

可能看起來修改前后的代碼差異并不十分明顯,實質上black已經對代碼中參數賦值 = 兩端的空格、注釋的格式、制表符等進行了替換和修改,我們使用pylint來進行驗證,執行 pylint 模塊名稱 命令,得到如下結果: 

 

可以看到,相對于最初的文件,評分從0分提高到7.3分,輸出的問題提示少了很多,剩余的問題主要是缺少說明文檔、變量命名不規范.black對于提高我們代碼規范性價比也是非常高的。

如果不想black直接對原文件進行修改,而是想看看它對代碼中的哪些地方進行了改動的話,可以使用--diff參數,執行black --diff 文件名稱,black會將相關信息輸出到控制臺(下圖,其中-表示源代碼,+表示建議修改后的代碼),而不會對原文件進行修改。 

 
總之,black真的是一個非常好用的庫,尤其對于新手來說,可以很方便地規范自己的代碼風格。 

 

責任編輯:龐桂玉 來源: Python愛好者社區
相關推薦

2020-07-10 15:41:41

Python代碼編程語言

2020-06-10 07:49:56

Python代碼開發工具

2022-07-07 09:19:24

JavaScript代碼樣式規則

2016-11-25 13:50:15

React組件SFC

2023-09-25 13:06:36

SpringBoot擴展接口

2024-01-22 09:01:00

SpringBoot接口代碼

2020-11-12 09:45:16

前端開發代碼

2017-09-05 14:27:11

新用戶推薦利器

2018-09-04 15:45:58

Python代碼編程語言

2017-09-01 14:18:50

前端React組件

2019-11-15 15:09:27

Python代碼優雅

2014-02-11 08:55:11

云計算云計算認證

2018-03-01 10:30:11

MYSQL開源數據庫

2012-02-28 10:38:29

Java

2020-12-19 10:45:08

Python代碼開發

2021-08-24 23:23:35

Python工具開發

2021-03-19 09:53:28

Python 開發編程語言

2019-10-31 08:55:07

搜索引擎工具

2021-02-03 19:46:01

工具Snipaste軟件開發

2020-07-29 17:35:08

Promise源碼前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区在线观看视频 | 中文字幕1区2区3区 日韩在线视频免费观看 | 国产91久久精品一区二区 | 国产区在线视频 | 亚洲欧美精 | 欧美一级在线 | 成人av播放 | 欧美精品一区在线观看 | 户外露出一区二区三区 | 国产一区二区三区网站 | 亚洲综合区 | 91国产在线视频在线 | 一区不卡在线观看 | 久久国产精品视频 | 国产99久久精品 | 综合国产在线 | 欧美在线一区二区三区 | 麻豆久久久久久久久久 | 国产乱码精品一区二区三区忘忧草 | 成人a免费| 成人在线视频免费观看 | 91精品国产一区二区三区香蕉 | 老司机精品福利视频 | 日本中文在线视频 | 深夜福利亚洲 | 午夜精品一区二区三区在线观看 | 在线看亚洲| 国产视频久久 | 一区二区三区国产好的精 | 亚洲精品1区| 国产一区二区在线观看视频 | 日韩一二区 | 中文字幕久久久 | 久久久久国产 | 久久精品国产一区二区三区不卡 | 在线免费看毛片 | 免费成人高清在线视频 | 婷婷综合五月天 | 国产精品日产欧美久久久久 | 日韩一区二区免费视频 | 综合自拍 |