背景

现在的大多数 Python 代码格式化工具(比如:autopep8 和 pep8ify)是可以移除代码中的 lint 错误。这显然有些局限性。比如:遵循 PEP 8 指导的代码可能就不会被格式化了,但这并不说明代码看起来就舒服。

但 YAPF 独辟蹊径。它脱胎于由 Daniel Jasper 开发的 clang-format。大体上来说,这个算法获取代码,然后把初始代码重新编排,即便初始代码并没有违背规范,也可使其达到遵循代码规范的最佳格式。这个理念和 Go 语言中的 gofmt 工具相似,终结关于格式的各种“圣战”。如果一个项目的代码库,无论何时修改,通过 YAPF 优化后,代码风格可统一,在每次 code review 中,也就没有必要争论风格了。

YAPF 的终极目标是生成和遵循代码规范的程序员写出的一样的代码。可帮你减少维护代码的苦差事。

YAPF 支持 Python 2.7 和 3.4+。

安装

#pip install yapf

用法

usage: yapf [-h] [-v] [-d | -i] [-r | -l START-END] [-e PATTERN]

[--style STYLE] [--style-help] [--no-local-style]

[--verify]

[files [files ...]]

FormatterforPython code.

positional arguments:

files

optional arguments:-h, --help show this help message and exit-v, --version show version number and exit-d, --diff print the diff forthe fixed source-i, --in-place make changes to files inplace-r, --recursive run recursively over directories-l START-END, --lines START-END

range of lines to reformat, one-based-e PATTERN, --exclude PATTERN

patternsforfiles to exclude from formatting--style STYLE specify formatting style: either a style name (forexample"pep8" or "google"), or the name of a filewith style settings. The default is pep8 unless a

.style.yapf or setup.cfgfile located inone of the

parent directories of the sourcefile(or current

directoryforstdin)--style-help show style settings and exit--no-local-style don't search for local style definition (.style.yapf)

--verify try to verify reformatted code for syntax errors

具体用法

使用yapf的两种方式是: FormatCode 和 FormatFile

FormatCode的参数为代码内容。

>>> from yapf.yapf_api import FormatCode #reformat a string of code

>>> FormatCode("f ( a = 1, b = 2 )")'f(a=1, b=2)\n'

我这边 from yapf.yapf_api import FormatCode 会提示“from yapf.yapf_api import FormatCode”错误,但是“import yapf"是好的

本人的使用方式:

>>>importyapf>>>yapf.yapf_api.FormatCode("f ( a = 1, b = 2 )")

('f(a=1, b=2)\n',True)

style_config参数:使用特定的style

style_config的值可以是一个格式样式设置的文件路径,也可以是一个样式名。

如果不进行定义的话,使用style.DEFAULT_STYLE_FACTORY设定的默认样式。

>>> FormatCode("def g():\n return True", style_config='pep8')'def g():\n return True\n'

lines参数:设定要应用样式的特定行

>>> FormatCode("def g( ):\n a=1\n b = 2\n return a==b", lines=[(1, 1), (2, 3)])'def g():\n a = 1\n b = 2\n return a==b\n'

print_diff参数:返回源文件和更改后的文件之间的diff

感觉跟linux的diff很像,表示不习惯。

>>> print(FormatCode("a==b", filename="foo.py", print_diff=True))---foo.py (original)+++foo.py (reformatted)

@@-1 +1@@-a==b+a == b

FormatFile 的参数是文件。

>>> from yapf.yapf_api import FormatFile

假设需要更改的源文件是”foo.py”。

>>> print(open("foo.py").read()) #查看文件内容

x= { 'a':37,'b':42,'c':927}

y= 'hello''world'z= 'hello'+'world'a= 'hello {}'.format('world')classfoo ( object ):deff (self ):return 37*-+2

def g(self, x,y=42):returnydeff ( a ) :return 37+-+a[42-x : y**3]>>> FormatFile("foo.py")

('a == b\n', 'utf-8')

in_place参数:如果值为True的话,会直接用更改好的内容替代源文件

>>> FormatFile("foo.py", in_place=True)

(None,'utf-8')

python格式化代码工具_python 代码格式化工具:YAPF相关推荐

  1. python 的代码格式_python代码格式

    笨办法学 Python · 续 中文版 笨办法学 Python · 续 中文版 原书:Learn More Python 3 The Hard Way 译者:飞龙 自豪地采用谷歌翻译 在线阅读 PDF ...

  2. python 源码保护_Python代码保护

    Python等解释性脚本语言都需要源码明文存储,所以有两种情况需要考虑代码保护的问题: 代码逻辑的保护:代码本身有版权或者不能公开源代码 涉及用户名.密码等关键信息的配置 代码保护方法 Python代 ...

  3. origin python控制台怎么用_python代码运行助手如何使用

    python代码运行助手是能在网页上运行python语言的工具.因为python的运行环境在很多教程里都是用dos的,黑乎乎的界面看的有点简陋,所以出了这python代码运行助手,作为ide. 实际上 ...

  4. python怎么设置代码执行时间_python 代码运行时间获取方式详解

    我们知道为了提高代码的运行速度,我们需要对书写的python代码进行性能测试,而代码性能的高低的直接反馈是电脑运行代码所需要的时间.这里将介绍四种常用的测试代码运行速度的方法. 第一种:使用time模 ...

  5. python 项目构建工具_python的构建工具setup.py

    一.构建工具setup.py的应用场景 在安装python的相关模块和库时,我们一般使用 "pip install 模块名" 或者 "python setup.py in ...

  6. python自动化构建工具_Python自动化构建工具scons使用入门笔记

    这段时间用到了scons,这里总结下,也方便我以后查阅. 一.安装sconsLinux环境(以CentOS为例) 1.yum安装 yum install scons 2.源码安装 下载scons:ht ...

  7. python自动化部署工具_Python + Allure(报告)+ Jenkins(持续集成)接口自动化测试环境搭建...

    (这个是内部分享文档,侧重于测试报告的生成以及持续集成,至于接口框架的内部组织可以按照自己的想法来实现,有问题欢迎留言) 1.环境: • 操作系统:windows 64位 • 软件环境:python3 ...

  8. python比较数据工具_Python模拟数据工具哪些比较好用

    今天给大家推荐两款基本的Python模拟数据工具:mock和pytest monkeypatch. 为什么要模拟数据? 我们的应用中有一些部分需要依赖外部的库或对象.为了隔离开这部分,我们需要代替这些 ...

  9. python回测工具_Python爬虫回测股票的实例讲解

    股票和基金一直是热门的话题,很多周围的人都选择不同种类的理财方式.就股票而言,肯定是短时间内收益最大化,这里我们需要用python爬虫的方法,来帮助我们获取一些股票的数据,这样才能更好的买到相应的股票 ...

最新文章

  1. python label怎么用_python tkinter label标签怎么使用?
  2. H3C 7506E基于时间的分时段上网的ACL
  3. 关于chm文件打不开的解决方案
  4. 打开有视频的文件夹~~当遇到某些特定的视屏格式就会出现Activemovie Window:Explorer.EXE-应用程序错误
  5. python之路_文件操作解析
  6. Java中几种输出数组的for循环,以及循环中使用标签(非goto)
  7. 第一篇-Html标签中head标签,body标签中input系列,textarea和select标签
  8. 使用 C# 和 Blazor 进行全栈开发
  9. Actor-ES框架:Ray-Handler之ToReadHandler编写
  10. Oracle数据库的备份
  11. k8s与监控--从telegraf改造谈golang多协程精确控制
  12. MySQL数据库“局部”乱码
  13. 软件设计师19-系统开发和运行02
  14. GitHub使用笔记
  15. ios查看帧率的软件_软件测试之性能测试(ios)——获取fps(流畅度)
  16. 带通滤波器中心频率带宽matlab,带通滤波器频率设置
  17. Mac VM 虚拟机固定IP
  18. CCD实际尺寸对照表
  19. 申请免费的域名并且通过FTP上传及通过自己的域名访问自己的网站
  20. MathJax 支持的 Latex 符号总结(集合运算)

热门文章

  1. USB 之三 常用抓包/协议分析工具(Bus Hound、USBlyzer、USBTrace、USB Monitor Pro等)
  2. 传感器信号 如何发送到服务器,传感器如何将消息发送给云服务器
  3. Java计算器接口策略_Java 基础 接口 ——运算
  4. android上河南星海科技_分数不高能上什么空乘学校?推荐下
  5. springboot map数据类型注入_SpringBoot结合策略模式实战套路
  6. Arduino--二维码显示
  7. Go 语言新提案:添加模糊测试支持
  8. 英伟达账号登录邮箱验证收不到_【硬核教学】解决登录230锁定
  9. python语法错误概述_Python 错误和异常代码详解
  10. python函数中可变参数的传递方式是_详解Python函数可变参数定义及其参数传递方式...