Python 语言的自动格式化工具

发表于:2023-1-10 08:43

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:梦回丶故里    来源:程序那些事儿

  每种编程语言都有自己专属的格式化工具,比如 golang 语言的 gofmt,JavaScript 语言的 prettier,php 语言的 php-cs-fixer,和这些编程语言类似,python 也有自己的自动化格式工具,不过不同的是,它有很多个格式化工具,接下来我们就来看看这些不同的格式化工具究竟有什么不同。
  autopep8
  这个是最早的 python 格式化代码工具,它采用 pycodestyle 来分析代码,然后对于不符合 pep 风格的代码进行修复。同时,它还会修复一些已经弃用的代码,并且规范代码的结尾,对于一些方法和函数添加一些空行分隔符。
  autopep8 是支持通过配置文件进行格式化声明的,它支持。cfg,.ini  .pep8 .flake8 等格式的配置文件。目前他在 github 上有 4200 多个点赞。
  yapf
  这是一个谷歌推出的格式化工具,因为有大厂背书,所以它发展的很快,目前在 github 上有 13000 个点赞。他不会检查 pep 准则,它只会格式化代码。它采取的是类似于clang-format的思想,就是读取整个文件代码,然后格式化成最佳的格式。
  它是一个可配置的代码格式方案,不同的配置会导致不同的格式化结果,目前主流的配置有 pep8,google,facebook,chromium 等。此外,它还支持自定义配置方案,通过--style即可指定格式样式。
  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]
  black
  black 是最近几年新推出的 python 代码格式化工具,虽然是最新推出的,然而它却是最受欢迎的,目前它在 github 上的点赞是 30000 多。
  black 号称毫不妥协的代码格式化工具。也就是说,它默认不许你也不需要你手动进行代码格式的细节调整。
  它具有非常高效的速度,并且被很多项目所采用。
  Black 拥有全面的测试套件,具有高效的并行功能测试
  下面是使用 black 的一些组织:Facebook,Dropbox,KeepTruckin,Mozilla,Quora, Duolingo,QuantumBlack,Tesla,Archer Aviation。
  你可以看到,非常多的著名公司使用它来格式化 python 代码,只因为它太好用了,太方便了。
  总结
  autopep8 几乎已经被放弃了,这从 github 上的点赞数就可以看出来,yapf 具有更加灵活的,高度定制化的格式化方案,而 black 则让程序看起来更加统一和优雅,并且可以避免复杂的配置。
  如果你公司或者你正在使用 python 进行项目的开发,那么选择一款代码格式化工具是非常必要的,它可以让你的开发团队节省大量时间。而且无论是你的个人代码还是其他人的代码格式看起来都是一样的,这样每个人阅读其他人的代码都会是一件幸福的事情。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号