平时习惯了杂乱无章地编写代码,而最后的代码勘定,却依赖于PyCharm自带的格式化工具,以及其自带的提示功能来规范代码。而pycharm里的格式化工具,不支持对多文件进行代码批量格式化,曾经尝试些解决方案,结果无功而返,不了了之。今天看到这个工具,终于有望了。

# 本地小试

cd /home/kylin/program

git clone https://github.com/google/yapf.git

PYTHONPATH=/home/kylin/program/yapf/ python /home/kylin/program/yapf/yapf -h

......

介绍

目前用于Python的格式化程序(如autopep8和pep8ify)都用于删除代码中的lint错误。这有很明显的局限性。

YAPF采用了不同的方法,基于Daniel Jasper开发的“'clang-format”。从本质上来说,该算法取走代码并重新排版,以符合样式指南的最佳格式,即便原始代码没有违反样式指南。这个想法也是类似于Go编程语言的gofmt工具。

其最终目标是让YAPE所产生的代码可以与程序员所写的代码一样好(前提是程序员遵循样式指南),它取代了一些维护代码的苦差。

安装

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

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

Python版本

YAPF支持Python2.7和3.4+。

用法

设置:

格式样式

使用YPF的格式样式是可以配置的,并且有许多“knobs”可用于调整YAPF是如何做格式的。(查看style.py模块)

为了控制样式,运行带有--style的YAPF。它接受一个预定义的样式(例如pep8或google)——一个通往配置文件(能指定所需样式或一个键/值对的字典)的途径。

配置文件是一个简单的键=值对的列表(区分大小写),拥有一个【style】,例如:

当然也可以通过字典在命令行上做出同样的事情,例如:

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

这将用google作为基础样式,并修改成拥有4个空格缩进。

案例

通过YAPF,可以将下面这段代码:

重新格式化成:

常见问题

为什么YAPF破坏了我很棒的格式?

对于一些代码,它不会比手动格式好,特别是大的数据文字,在YAPF下会变得更糟糕。引起这些的原因是多样的,但是从本质上来说,YAPF只是一个帮助开发的简单工具,它将事物与样式指南保持一致,但这并不等于可读性。

为减轻这种情况,你需要表明YAPF重新格式化时需要忽视的区域:

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

为什么不改善现有的工具?

现有的工具要考虑到不同的目标,并需要大量的修改转换以便使用clang-format算法。我们希望使用clang-format重组算法。

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

答案是肯定的!YAPF被设计用于作为一个库以及一个命令行工具来使用。这意味着使用YAPF时,一个工具或IDE插件是免费的。​

注:更多详细内容可在GitHub上获取,点此进入。

python 格式化工具_Google的Python代码格式化工具YAPF详解相关推荐

  1. c调用python脚本如何获取结果_使用C++调用Python代码的方法详解

    一.配置python环境问题 1.首先安装Python(版本无所谓),安装的时候选的添加python路径到环境变量中 安装之后的文件夹如下所示: 2.在VS中配置环境和库 右击项目->属性-&g ...

  2. python交互式和文件式区别_Python 运行.py文件和交互式运行代码的区别详解

    代码版本:3.6.3 1. 交互式运行代码会直接给出表达式的结果,运行代码文件必须print才能在控制台看到结果. 直接给出结果: 没有print是看不到结果的: 有print才能看到结果: 另:交互 ...

  3. python判断是否回文_对python判断是否回文数的实例详解

    设n是一任意自然数.若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数.例如,若n=1234321,则称n为一回文数:但若n=1234567,则n不是回文数. 上面的解释就是说回文数和逆 ...

  4. python中的class怎么用_对python 中class与变量的使用方法详解

    python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding ...

  5. python当型循环_对python while循环和双重循环的实例详解

    废话不多说,直接上代码吧! #python中,while语句用于循环执行程序,即在某个条件下,循环执行某段程序,以处理需要重复处理的相同任务. #while是"当型"循环结构. i ...

  6. python画三维平面-Python 绘制酷炫的三维图步骤详解

    通常我们用 Python 绘制的都是二维平面图,但有时也需要绘制三维场景图,比如像下面这样的: 这些图怎么做出来呢?今天就来分享下如何一步步绘制出三维矢量(SVG)图. 八面体 我们先以下面这个八面体 ...

  7. python 制作gif-利用Python如何制作好玩的GIF动图详解

    前言 之前我们分享过用Python进行可视化的9种常见方式.其实我们还能让可视化图形逼格更高一些,今天就分享一下如何让可视化秀起来:用Python和matplotlib制作GIF图表. 假如电脑上没有 ...

  8. python装饰器函数-Python函数装饰器常见使用方法实例详解

    本文实例讲述了Python函数装饰器常见使用方法.分享给大家供大家参考,具体如下: 一.装饰器 首先,我们要了解到什么是开放封闭式原则? 软件一旦上线后,对修改源代码是封闭的,对功能的扩张是开放的,所 ...

  9. python 参数拼接token_对python的unittest架构公共参数token提取方法详解

    额...每个请求都有token值的传入,但是token非常易变,一旦变化,所有的接口用例都得改一遍token,工作量太大了... 那么有没有一种方法能把token提取出来,作为一个全局变量,作为一个参 ...

  10. python读取遥感 dat_基于python批量处理dat文件及科学计算方法详解

    摘要:主要介绍一些python的文件读取功能,文件内容修改,文件名后缀更改等操作. 批处理文件功能 import os path1 = 'C:\\Users\\awake_ljw\\Documents ...

最新文章

  1. 广泛的信号处理链如何让语音助理“正常工作”
  2. yaourt -S mysql_arch中yaourt的安装和使用
  3. Spring4MVC 请求参数映射和Content-type
  4. Linux字符界面操作进阶
  5. Gym 环境汇总 (无mojoco版)
  6. 网工协议基础(4)TCP/UDP协议
  7. 维基百科 百度百科:谁是真正的草根
  8. 华为p4用鸿蒙系统吗_华为正式发布鸿蒙OS Beta版,网友:荣耀还能用上鸿蒙吗
  9. 移动wabAPP 开发 viewport 注意事项
  10. 在Windows系统中配置Google AddressSanitizer
  11. 2017年网易校招题 买苹果
  12. asp.net用url重写URLReWriter实现任意二级域名(续)
  13. 系统板I/O端口地址分配(一)
  14. 查看Tensorflow 是使用GPU or CPU运行
  15. iframe操作ie,firefox兼容
  16. 用ftp上传服务器文件大小,ftp服务器上传文件大小
  17. 当生命科学遇上AI,会产生怎样1+1>2效果?
  18. 此beta版已额满_天龙八部荣耀版 新手升级指南
  19. arduino超声波测距接线图详细_Arduino Uno + HY-SRF05 超声波测距模块详细讲解演示实验...
  20. canvas教程5-绘制路径

热门文章

  1. 95-862-045-源码-runtime-blob-BlobService
  2. 【Elasticsearch】elasticsearch 查询 高亮
  3. 95-233-040-源码-TaskManager-TaskManager的jvm-exit-on-oom配置
  4. RocketMQ : RemotingTooMuchRequestException: sendDefaultImpl call timeout
  5. 【Java SE:抽象类】抽象类的引出与深入理解
  6. php变量在html调用函数调用,PHP_如何在html标记中调用的函数里传递对象,最近使用jquery结合Ajax开发一个 - phpStudy...
  7. 计算机内页动画的作用是什么,滑环工作原理动画示意图有什么作用?
  8. ubuntu19.04安装pip3以及virtualenv和virtualenvwrapper
  9. Mongo Replica set的Primary 客户端不回自动重连新的primary
  10. Docker启动失败提示【exec user process caused: exec format error】