標籤:
點這裡
現在的大多數 Python 代碼格式化工具(比如:autopep8 和 pep8ify)是可以移除代碼中的 lint 錯誤。這顯然有些局限性。比如:遵循 PEP 8 指導的代碼可能就不會被格式化了,但這並不說明代碼看起來就舒服。
譯註:lint 是最著名的C語言工具之一,是由貝爾實驗室SteveJohnson於1979在PCC(PortableC Compiler)基礎上開發的靜態程式碼分析,一般由UNIX系統提供。與大多數C語言編譯器相比,lint可以對程式進行更加廣泛的錯誤分析,是一種更加嚴密的編譯工具。最初,lint這個工具用來掃描C源檔案並對來源程式中不可移植的代碼提出警告。但是現在大多數lint公用程式已經變得更加嚴密,它不但可以檢查出可移植性問題,而且可以檢查出那些雖然可移植並且完全合乎文法但卻很可能是錯誤的特性。
但 YAPF 獨闢蹊徑。它脫胎於由 Daniel Jasper 開發的 clang-format。大體上來說,這個演算法擷取代碼,然後把初始代碼重新編排,即便初始代碼並沒有違背規範,也可使其達到遵循代碼規範的最佳格式。這個理念和 Go 語言中的 gofmt 工具相似,終結關于格式的各種“聖戰”。如果一個項目的程式碼程式庫,無論何時修改,通過 YAPF 最佳化後,代碼風格可統一,在每次 code review 中,也就沒有必要爭論風格了。
YAPF 的終極目標是產生和遵循代碼規範的程式員寫出的一樣的代碼。可幫你減少維護代碼的苦差事。
YAPF 支援 Python 2.7 和 3.4+。
用法
1234567891011121314151617 |
usage: yapf [-h] [--style STYLE] [-d | -i] [-l START-END | -r] ... Formatter for Python code. positional arguments: files optional arguments: -h, --help show this help message and exit --style STYLE specify formatting style: either a style name (for example "pep8" or "google"), or the name of a file with style settings. pep8 is the default. -d, --diff print the diff for the fixed source -i, --in-place make changes to files in place -l START-END, --lines START-END range of lines to reformat, one-based -r, --recursive run recursively over directories |
樣本
美化前:
1234567891011121314 |
x = { ‘a‘ : 37 , ‘b‘ : 42 , ‘c‘ : 927 } y = ‘hello ‘ ‘world‘ z = ‘hello ‘ + ‘world‘ a = ‘hello {}‘ . format ( ‘world‘ ) class foo ( object ): def f ( self ): return 37 * - + 2 def g( self , x,y = 42 ): return y def f ( a ) : return 37 + - + a[ 42 - x : y * * 3 ] |
美化後:
123456789101112131415 |
x = { ‘a‘ : 37 , ‘b‘ : 42 , ‘c‘ : 927 } y = ‘hello ‘ ‘world‘ z = ‘hello ‘ + ‘world‘ a = ‘hello {}‘ . format ( ‘world‘ ) class foo( object ): def f( self ): return 37 * - + 2 def g( self , x, y = 42 ): return y def f(a): return 37 + - + a[ 42 - x:y * * 3 ] |
詳情請參考下方的 Github 連結。
GitHub:https://github.com/google/yapf
YAPF:Google開源的Python代碼格式化工具