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中用于计算指数的exp()方法
May 14 Python
python的paramiko模块实现远程控制和传输示例
Oct 13 Python
Python运维之获取系统CPU信息的实现方法
Jun 11 Python
详解如何为eclipse安装合适版本的python插件pydev
Nov 04 Python
Django实现学员管理系统
Feb 26 Python
Python3模拟curl发送post请求操作示例
May 03 Python
Python拆分大型CSV文件代码实例
Oct 07 Python
为什么黑客都用python(123个黑客必备的Python工具)
Jan 31 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
Mar 03 Python
Pytorch高阶OP操作where,gather原理
Apr 30 Python
python爬取抖音视频的实例分析
Jan 19 Python
Python 中面向接口编程
May 20 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 使用GD库为页面增加水印示例代码
2014/03/24 PHP
php+ajax实时刷新简单实例
2015/02/25 PHP
php实现在服务器端调整图片大小的方法
2015/06/16 PHP
PHP实现的简单缓存类
2015/07/29 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
laravel高级的Join语法详解以及使用Join多个条件
2019/10/16 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
使用jQuery监听DOM元素大小变化
2016/02/24 Javascript
JavaScript 最佳实践:帮你提升代码质量
2016/12/03 Javascript
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
2017/12/05 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
bing Map 在vue项目中的使用详解
2018/04/09 Javascript
vue通过数据过滤实现表格合并
2020/11/30 Javascript
JS动态图片的实现方法完整示例
2020/01/13 Javascript
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
2018/02/08 Python
Python日志syslog使用原理详解
2020/02/18 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
python基于win32api实现键盘输入
2020/12/09 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
Sneaker Studio匈牙利:购买运动鞋
2018/03/26 全球购物
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
竞选演讲稿范文
2013/12/28 职场文书
中级会计职业生涯规划范文
2014/01/16 职场文书
营销团队口号
2014/06/06 职场文书
房地产资料员岗位职责
2014/07/02 职场文书
助人为乐好少年事迹材料
2014/08/18 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
优质护理心得体会
2016/01/22 职场文书
vue+echarts实现多条折线图
2022/03/21 Vue.js
redis protocol通信协议及使用详解
2022/07/15 Redis