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框架可适配的各种数据库介绍
Jul 15 Python
Python中进程和线程的区别详解
Oct 29 Python
PyCharm在win10的64位系统安装实例
Nov 26 Python
Python中文件的读取和写入操作
Apr 27 Python
python把数组中的数字每行打印3个并保存在文档中的方法
Jul 17 Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 Python
对pandas中两种数据类型Series和DataFrame的区别详解
Nov 12 Python
python3通过selenium爬虫获取到dj商品的实例代码
Apr 25 Python
pycharm sciview的图片另存为操作
Jun 01 Python
Keras中的多分类损失函数用法categorical_crossentropy
Jun 11 Python
python实现取余操作的简单实例
Aug 16 Python
Python opencv缺陷检测的实现及问题解决
Apr 24 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入门学习知识点七 PHP函数的基本应用
2011/07/14 PHP
PHP中“简单工厂模式”实例代码讲解
2012/09/04 PHP
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
EXT中xtype的含义分析
2010/01/07 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
2010/12/06 Javascript
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
2011/03/03 Javascript
理解jQuery stop()方法
2014/11/21 Javascript
javascript实现滑动解锁功能
2014/12/31 Javascript
JavaScript动态改变div属性的实现方法
2015/07/22 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
微信小程序 二维码canvas绘制实例详解
2017/01/06 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
常见的在Python中实现单例模式的三种方法
2015/04/08 Python
Python干货:分享Python绘制六种可视化图表
2018/08/27 Python
Python生成器的使用方法和示例代码
2019/03/04 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
NumPy中的维度Axis详解
2019/11/26 Python
pymysql模块的操作实例
2019/12/17 Python
python中的错误如何查看
2020/07/08 Python
CSS3 简单又实用的5个属性
2010/03/04 HTML / CSS
CSS3新属性transition-property transform box-shadow实例学习
2013/06/06 HTML / CSS
GAP阿联酋官网:GAP UAE
2017/11/30 全球购物
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
幼儿园数学教学反思
2014/02/02 职场文书
请假条格式范文
2014/04/10 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
植物生产学专业求职信
2014/08/08 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
2015年元旦晚会活动总结(学生会)
2014/11/28 职场文书
小学语文复习计划
2015/01/19 职场文书
催款律师函范文
2015/05/27 职场文书
退休职工欢送会致辞
2015/08/01 职场文书