Google开源的Python格式化工具YAPF的安装和使用教程


Posted in Python onMay 31, 2016

目前用于Python的格式化程序(如autopep8和pep8ify)都用于删除代码中的lint错误。这有很明显的局限性。
YAPF采用了不同的方法,基于Daniel Jasper开发的“'clang-format”。从本质上来说,该算法取走代码并重新排版,以符合样式指南的最佳格式,即便原始代码没有违反样式指南。这个想法也是类似于Go编程语言的gofmt工具。
其最终目标是让YAPE所产生的代码可以与程序员所写的代码一样好(前提是程序员遵循样式指南),它取代了一些维护代码的苦差。

安装
可以直接通过pip进行安装:

pip install yapf

如果你打算使用YAPF作为一个命令行工具,而不是一个库,那么安装是没有必要的。通过Python解释器,YAPF可以作为一个目录运行。如果你克隆/解压YAPF到DIR,可以这么运行:

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

YAPF的使用
安装完成之后,就可以直接在命令行中使用了。 以下是yapf的命令行参数:

usage: yapf [-h] [--style STYLE] [-d | -i] [-l START-END | -r] ...
Formatter for Python code.

positional arguments:
 files

optional arguments:
 -h, --help   显示帮助信息
 --style STYLE   指定需要格式化的编程风格,如pep8或者google等
      也可以是自定义的设置文件。默认是pep8
 -d, --diff   比较格式化后的文件和原文件的区别
 -i, --in-place  直接把格式化的文件更改在源文件上
 -l START-END, --lines START-END
      指定格式化的行的范围
 -r, --recursive  在目录中递归运行

格式样式
使用YPF的格式样式是可以配置的,并且有许多“knobs”可用于调整YAPF是如何做格式的。(查看style.py模块)
为了控制样式,运行带有--style的YAPF。它接受一个预定义的样式(例如pep8或google)——一个通往配置文件(能指定所需样式或一个键/值对的字典)的途径。
配置文件是一个简单的键=值对的列表(区分大小写),拥有一个【style】,例如:

Google开源的Python格式化工具YAPF的安装和使用教程

当然也可以通过字典在命令行上做出同样的事情,例如:
--style='{basedonstyle: google, indent_width: 4}'
这将用google作为基础样式,并修改成拥有4个空格缩进。

例子
以下是一段非常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在格式化的时候仍然有一些问题。如:

BAZ = {
 [1, 2, 3, 4],
 [5, 6, 7, 8],
 [9, 10, 11, 12]
}

当有一大段内容的时候,我们都习惯分行排列,因为这显然更方便我们阅读。但是,使用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是一个非常有用的工具,它可以帮助你将代码变得更加一致、更加容易阅读并且Pythonic。

Python 相关文章推荐
使用python Django做网页
Nov 04 Python
Python使用ftplib实现简易FTP客户端的方法
Jun 03 Python
python开发之list操作实例分析
Feb 22 Python
浅谈python字典多键值及重复键值的使用
Nov 04 Python
手把手教你用python抢票回家过年(代码简单)
Jan 21 Python
python list转矩阵的实例讲解
Aug 04 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
Jul 01 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
Jan 20 Python
基于Django signals 信号作用及用法详解
Mar 28 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
Mar 03 Python
python 如何做一个识别率百分百的OCR
May 29 Python
Python实战之OpenCV实现猫脸检测
Jun 26 Python
Python中Collections模块的Counter容器类使用教程
May 31 #Python
Python的Django应用程序解决AJAX跨域访问问题的方法
May 31 #Python
python语言使用技巧分享
May 31 #Python
Windows中安装使用Virtualenv来创建独立Python环境
May 31 #Python
Windows下Python使用Pandas模块操作Excel文件的教程
May 31 #Python
深入理解python中的浅拷贝和深拷贝
May 30 #Python
浅谈Python的文件类型
May 30 #Python
You might like
创建配置文件 用PHP写出自己的BLOG系统 2
2010/04/12 PHP
php和javascript之间变量的传递实现代码
2012/12/19 PHP
php操作csv文件代码实例汇总
2014/09/22 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
2015/04/08 PHP
PHP实现即时输出、实时输出内容方法
2015/05/27 PHP
全面解析PHP面向对象的三大特征
2017/06/10 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
2018/12/21 PHP
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
Date对象格式化函数代码
2010/07/17 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
jQuery学习笔记之toArray()
2014/06/09 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
原生js实现倒计时功能(多种格式调用)
2017/01/12 Javascript
Bootstrap3 模态框使用实例
2017/02/22 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
Node.js EventEmmitter事件监听器用法实例分析
2019/01/07 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
Python抓取京东图书评论数据
2014/08/31 Python
Python的函数的一些高阶特性
2015/04/27 Python
python实现在字符串中查找子字符串的方法
2015/07/11 Python
python中map()与zip()操作方法
2016/02/27 Python
使用Nginx+uWsgi实现Python的Django框架站点动静分离
2016/03/21 Python
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
Python中xml和json格式相互转换操作示例
2018/12/05 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
应届毕业生个人自我评价
2013/09/20 职场文书
竞选团支书演讲稿
2014/04/28 职场文书
小学生志愿者活动方案
2014/08/23 职场文书
交通事故和解协议书
2014/09/25 职场文书
2015年世界无烟日活动方案
2015/05/04 职场文书
2016国培研修心得体会
2016/01/08 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书
python基于OpenCV模板匹配识别图片中的数字
2021/03/31 Python
Python集合的基础操作
2021/11/01 Python