Google開(kāi)源的Python格式化工具YAPF的安裝和使用教程
目前用于Python的格式化程序(如autopep8和pep8ify)都用于刪除代碼中的lint錯(cuò)誤。這有很明顯的局限性。
YAPF采用了不同的方法,基于Daniel Jasper開(kāi)發(fā)的“'clang-format”。從本質(zhì)上來(lái)說(shuō),該算法取走代碼并重新排版,以符合樣式指南的最佳格式,即便原始代碼沒(méi)有違反樣式指南。這個(gè)想法也是類(lèi)似于Go編程語(yǔ)言的gofmt工具。
其最終目標(biāo)是讓YAPE所產(chǎn)生的代碼可以與程序員所寫(xiě)的代碼一樣好(前提是程序員遵循樣式指南),它取代了一些維護(hù)代碼的苦差。
安裝
可以直接通過(guò)pip進(jìn)行安裝:
pip install yapf
如果你打算使用YAPF作為一個(gè)命令行工具,而不是一個(gè)庫(kù),那么安裝是沒(méi)有必要的。通過(guò)Python解釋器,YAPF可以作為一個(gè)目錄運(yùn)行。如果你克隆/解壓YAPF到DIR,可以這么運(yùn)行:
$ PYTHONPATH=DIR python DIR/yapf [options] ...
YAPF的使用
安裝完成之后,就可以直接在命令行中使用了。 以下是yapf的命令行參數(shù):
usage: yapf [-h] [--style STYLE] [-d | -i] [-l START-END | -r] ...
Formatter for Python code. positional arguments: files optional arguments: -h, --help 顯示幫助信息 --style STYLE 指定需要格式化的編程風(fēng)格,如pep8或者google等 也可以是自定義的設(shè)置文件。默認(rèn)是pep8 -d, --diff 比較格式化后的文件和原文件的區(qū)別 -i, --in-place 直接把格式化的文件更改在源文件上 -l START-END, --lines START-END 指定格式化的行的范圍 -r, --recursive 在目錄中遞歸運(yùn)行
格式樣式
使用YPF的格式樣式是可以配置的,并且有許多“knobs”可用于調(diào)整YAPF是如何做格式的。(查看style.py模塊)
為了控制樣式,運(yùn)行帶有--style的YAPF。它接受一個(gè)預(yù)定義的樣式(例如pep8或google)——一個(gè)通往配置文件(能指定所需樣式或一個(gè)鍵/值對(duì)的字典)的途徑。
配置文件是一個(gè)簡(jiǎn)單的鍵=值對(duì)的列表(區(qū)分大小寫(xiě)),擁有一個(gè)【style】,例如:
當(dāng)然也可以通過(guò)字典在命令行上做出同樣的事情,例如:
--style='{basedonstyle: google, indent_width: 4}'
這將用google作為基礎(chǔ)樣式,并修改成擁有4個(gè)空格縮進(jìn)。
例子
以下是一段非常ugly的代碼:
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]
利用yapf將它格式化:
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]
好看很多!
另外,YAPF在格式化的時(shí)候仍然有一些問(wèn)題。如:
BAZ = { [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] }
當(dāng)有一大段內(nèi)容的時(shí)候,我們都習(xí)慣分行排列,因?yàn)檫@顯然更方便我們閱讀。但是,使用YAPF格式化后:
BAZ = {[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]}
遇到這種情況,YAPF也提供了解決的方法,就是在代碼段的后面加上: # yapf: disable
BAZ = { [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] } # yapf: disable
所以,YAPF是一個(gè)非常有用的工具,它可以幫助你將代碼變得更加一致、更加容易閱讀并且Pythonic。
相關(guān)文章
Python3與redis交互,保存的是字符串,取出來(lái)是bytes類(lèi)型問(wèn)題
這篇文章主要介紹了Python3與redis交互,保存的是字符串,取出來(lái)是bytes類(lèi)型問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,2023-09-09python?Seaborn繪制統(tǒng)計(jì)圖全面指南(直方圖散點(diǎn)圖小提琴圖熱力圖相關(guān)系數(shù)圖多張合并)
這篇文章主要介紹了python?Seaborn繪制統(tǒng)計(jì)圖全面指南,包括直方圖,散點(diǎn)圖,小提琴圖,熱力圖,相關(guān)系數(shù)圖及多張圖合并的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助2024-01-01Python實(shí)現(xiàn)一維插值方法的示例代碼
插值主要用于物理學(xué)數(shù)學(xué)中,逼近某一確定值的方法,是通過(guò)已知的離散數(shù)據(jù)求未知數(shù)據(jù)的方法。本文將利用Python實(shí)現(xiàn)一維插值方法,需要的可以參考一下2022-04-04利用Python模擬登錄pastebin.com的實(shí)現(xiàn)方法
這篇文章主要介紹了利用Python模擬登錄pastebin.com的實(shí)現(xiàn)方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-07-07編寫(xiě)Python腳本抓取網(wǎng)絡(luò)小說(shuō)來(lái)制作自己的閱讀器
這篇文章主要介紹了編寫(xiě)Python腳本抓取網(wǎng)絡(luò)小說(shuō)來(lái)制作自己的閱讀器的方法,包括對(duì)小說(shuō)的章節(jié)排列等方面的優(yōu)化,對(duì)于Python學(xué)習(xí)者來(lái)說(shuō)非常具有實(shí)踐意義!需要的朋友可以參考下2015-08-08echarts折線(xiàn)圖的每個(gè)折點(diǎn)都顯示數(shù)值的實(shí)現(xiàn)方式
這篇文章主要介紹了echarts折線(xiàn)圖的每個(gè)折點(diǎn)都顯示數(shù)值的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10解決python中 f.write寫(xiě)入中文出錯(cuò)的問(wèn)題
今天小編就為大家分享一篇解決python中 f.write寫(xiě)入中文出錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10