Google开源的Python格式化工具YAPF的安装和使用教程
作者:wwt 发布时间:2023-02-02 12:32:16
目前用于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】,例如:
当然也可以通过字典在命令行上做出同样的事情,例如:
--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。


猜你喜欢
- 前言RepeatMasker是一个通过已有数据库预测重复序列的软件,可以筛选DNA序列中的散在重复序列和低复杂序列,是重复序列注释的重要软件
- 和大多数的语言脚本一样,学习ASP最好的方法就是亲身尝试ASP,使用你自己的系统安装PWS或者IIS。你可以边学习边在你自己的服务器上测试A
- 本文主要介绍了Pyecharts地理数据可视化,分享给大家,具体如下:一、Pyecharts简介和安装1. 简介Echarts 是一个由百度
- 本文实例讲述了Python实现识别图片内容的方法。分享给大家供大家参考,具体如下:python识别图片内容。这里我的环境为windows64
- 本文实例为大家分享了js简单计算器的实现代码,供大家参考,具体内容如下1.html代码 <input type="text&
- 变量命名在《初识永远强大的函数》一文中,有一节专门讨论“取名字的学问”,就是有关变量名称的问题,本温故而知新的原则,这里要复习:名称格式:(
- function is_email($str){ //检验email return preg_match("/
- 使用Python 2.7 + pywin32 + wxpython开发每隔一段时间检测一下服务是否停止,如果停止尝试启动服务。进行服务停止日
- 让你成功安装vscode中go的相关插件注意:该演示环境是windows环境,linux和mac环境操作思路一样vscode中有很多go的相
- 一、subprocess以及常用的封装函数运行python的时候,我们都是在创建并运行一个进程。像Linux进程那样,一个进程可以fork一
- Flask 本身相当于一个内核,比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库
- 需求:小程序端拍照调用python训练好的图片分类模型。实现图片分类识别的功能。微信小程序端:重点在chooseImage函数中,根据图片路
- 介绍Prometheus 的基本原理是通过 HTTP 周期性抓取被监控组件的状态。任意组件只要提供对应的 HTTP 接口并且符合 Prome
- Float(浮动)概念也许是CSS中最让人迷惑的一个概念吧。Float经常被错误理解,而且因为将上下文元素全部浮动导致的可读性、
- 主要是:前序遍历、中序遍历、后序遍历、层级遍历、非递归前序遍历、非递归中序遍历、非递归后序遍历#!/usr/bin/env python#-
- 需求:用户点击删除按钮时,弹出一个确定框,如果用户点击“确定”执行删除操作,否则不执行JS代码function del() {var msg
- 一、SQLAlchemy简介1.1、SQLAlchemy是什么?sqlalchemy是一个python语言实现的的针对关系型数据库的orm库
- 本文用到的文件的下载地址百度网盘链接: https://pan.baidu.com/s/1tmpdEfAZKff5TOMAitUXqQ提取码
- 描述符类要求:描述符就是将某种特殊类型的类的实例指派给另一个类的属性至少要实现以下的一个方法:•__get__(self, instance
- 乐观锁乐观锁大多是基于数据版本记录机制实现,一般是给数据库表增加一个"version"字段。读取数据时,将此版本号一同读