Google的Python代碼格式化工具YAPF詳解


 

原文地址:http://geek.csdn.net/news/detail/29735

 

 

介紹

目前用於Python的格式化程序(如autopep8和pep8ify)都用於刪除代碼中的lint錯誤。這有很明顯的局限性。

YAPF采用了不同的方法,基於Daniel Jasper開發的“'clang-format”。從本質上來說,該算法取走代碼並重新排版,以符合樣式指南的最佳格式,即便原始代碼沒有違反樣式指南。這個想法也是類似於Go編程語言的gofmt工具。

其最終目標是讓YAPE所產生的代碼可以與程序員所寫的代碼一樣好(前提是程序員遵循樣式指南),它取代了一些維護代碼的苦差。

 

 

安裝

項目地址:https://github.com/google/yapf
如果你打算使用YAPF作為一個命令行工具,而不是一個庫,那么安裝是沒有必要的。通過Python解釋器,YAPF可以作為一個目錄運行。如果你克隆/解壓YAPF到DIR,可以這么運行:

$ PYTHONPATH=DIR python DIR/yapf [options] ...

 

 

Python版本

YAPF支持Python2.7和3.4+。

 

 

用法: (使用前請先備份您的代碼!!!)

python yapf -i -r --style='{based_on_style: google, indent_width: 4, column_limit: 999}' ${path}

 


設置:

http://img.my.csdn.net/uploads/201504/03/1428039886_1797.png

 

 

格式樣式

使用YPF的格式樣式是可以配置的,並且有許多“knobs”可用於調整YAPF是如何做格式的。(查看style.py模塊)

為了控制樣式,運行帶有--style的YAPF。它接受一個預定義的樣式(例如pep8或google)——一個通往配置文件(能指定所需樣式或一個鍵/值對的字典)的途徑。

 

配置文件是一個簡單的鍵=值對的列表(區分大小寫),擁有一個【style】,例如:

http://img.my.csdn.net/uploads/201504/03/1428040100_5148.png

 

當然也可以通過字典在命令行上做出同樣的事情,例如:

--style='{basedonstyle: google, indent_width: 4}'

這將用google作為基礎樣式,並修改成擁有4個空格縮進。

 

案例

通過YAPF,可以將下面這段代碼:

http://img.my.csdn.net/uploads/201504/03/1428040319_2295.png

 

重新格式化成:

http://img.my.csdn.net/uploads/201504/03/1428040355_2787.png

 

 

常見問題

為什么YAPF破壞了我很棒的格式?

對於一些代碼,它不會比手動格式好,特別是大的數據文字,在YAPF下會變得更糟糕。引起這些的原因是多樣的,但是從本質上來說,YAPF只是一個幫助開發的簡單工具,它將事物與樣式指南保持一致,但這並不等於可讀性。

為減輕這種情況,你需要表明YAPF重新格式化時需要忽視的區域:

http://img.my.csdn.net/uploads/201504/03/1428040424_3904.png

 

你也可以禁用格式單一的字面,例如:

http://img.my.csdn.net/uploads/201504/03/1428040444_5056.png

 

 

為什么不改善現有的工具?

現有的工具要考慮到不同的目標,並需要大量的修改轉換以便使用clang-format算法。我們希望使用clang-format重組算法。

 

 

我可以在程序中使用YAPF嗎?

答案是肯定的!YAPF被設計用於作為一個庫以及一個命令行工具來使用。這意味着使用YAPF時,一個工具或IDE插件是免費的。​

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM