• Google的Python代码格式化工具YAPF详解


      平时习惯了杂乱无章地编写代码,而最后的代码勘定,却依赖于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

    ......

      以下转载于网络对原文的翻译:http://geek.csdn.net/news/detail/29735

    介绍

    目前用于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+。

    用法

    设置:

    http://img.my.csdn.net/uploads/201504/03/1428039886_1797.png

    格式样式

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

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

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

    http://img.my.csdn.net/uploads/201504/03/1428040100_5148.png

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

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

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

    案例

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

    http://img.my.csdn.net/uploads/201504/03/1428040319_2295.png

    重新格式化成:

    http://img.my.csdn.net/uploads/201504/03/1428040355_2787.png

    常见问题

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

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

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

    http://img.my.csdn.net/uploads/201504/03/1428040424_3904.png

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

    http://img.my.csdn.net/uploads/201504/03/1428040444_5056.png

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

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

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

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

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

  • 相关阅读:
    菜鸟快速自学java00之变量类型
    php 接口和抽象类
    java 三大特性之多态性
    设计模式
    依赖注入
    Java设计模式工厂模式
    php 设计模式之策略模式
    大数的概述
    熟悉常用的Linux操作
    GridView动态添加列
  • 原文地址:https://www.cnblogs.com/kylinfish/p/4391526.html
Copyright © 2020-2023  润新知