自動優化工具Black
在眾多代碼格式化工具中,Black算是比較新的一個,它***的特點是可配置項比較少,個人認為這對於新手來說是件好事,因為我們不必過多考慮如何設置Black,讓 Black 自己做決定就好。
1).安裝與使用
與pylint類似,直接pip install black即可完成該模塊的安裝,不過black依賴於Python 3.6+,但它仍然可以格式化Python2的代碼。
在使用方面black默認讀取指定python文件並對其進行代碼規范格式化,然后輸出到原文件。
- l = [1,
- 2,
- 3,
- ]
例如,我們將上面這段代碼保存為test.py,然后在控制台執行 black test.py 指令,再次打開test.py,發現其中的代碼變成了這個樣子:
- l = [1, 2, 3]
當然,Black的封裝程度再高也是有自定義配置項的,例如使用--version查看版本、使用--help查看幫助信息、使用--diff將修改信息輸出到控制台而不更改原文件,下面我們還是結合一個實例來進行演示說明。
2).實例演示說明
這里我們仍然使用pylint部分的代碼進行演示。通過上面的操作我們知道,對這段代碼直接使用pylint進行測試會輸出很多問題提示,並給出一個評分0。現在我們首先使用black對其進行格式化,得到以下代碼:
- # -*- coding:utf-8 -*-
- import pandas as pd
- data = []
- char_replace_dict = {':':' ', '(':'(', ')':')', ',':','}
- with open('xmq_survey.txt', 'r', encoding = 'utf-8') as file:
- for line in file.readlines():
- for key, value in char_replace_dict.items():
- line = line.replace(key, value)#原來這個是深度引用
- #這條代碼比自己寫的簡介的多,也更python
- data.append(line)
- with open('survey.txt', 'w', encoding = 'utf-8') as file:
- for line in data:
- file.write(line)
- raw_data = pd.read_table('survey.txt', delimiter = ' ', header = None) #查看read_table函數的用法
- raw_data.columns = ['Name', 'Raw Info']
- raw_data.count()
- print('successful')
可能看起來修改前后的代碼差異並不十分明顯,實質上black已經對代碼中參數賦值 = 兩端的空格、注釋的格式、制表符等進行了替換和修改,我們使用pylint來進行驗證,執行 pylint 模塊名稱 命令,得到如下結果:

可以看到,相對於最初的文件,評分從0分提高到7.3分,輸出的問題提示少了很多,剩余的問題主要是缺少說明文檔、變量命名不規范.black對於提高我們代碼規范性價比也是非常高的。
如果不想black直接對原文件進行修改,而是想看看它對代碼中的哪些地方進行了改動的話,可以使用--diff參數,執行black --diff 文件名稱,black會將相關信息輸出到控制台(下圖,其中-表示源代碼,+表示建議修改后的代碼),而不會對原文件進行修改。

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