社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

谷歌开源!一个格式化 Python 代码的好帮手

进击的Coder • 2 年前 • 422 次点击  
这是「进击的Coder」的第 756 篇技术分享
作者:Ckend
来源:Python 实用宝典

阅读本文大概需要 5 分钟。



大部分人使用 Python 中的代码格式化工具时都会选择 autopep8 之类的工具,这些工具可能有一定的局限性,比如不会重新格式化已经符合 PEP8 的代码。

而本文即将介绍的 Yapf,不仅能将代码格式化为符合 PEP8 代码指南的格式,还能格式化为符合 Google 代码指南的格式,可选项更多,让你的代码更加漂亮。

1.准备


开始之前,需要先安装它。

pip install yapf

YAPF 支持 Python 2.7 和 3.6.4+。

2.Yapf 使用方法


你可以在命令行中直接使用 Yapf, 参数如下:

yapf [-h] [-v] [-d | -i | -q] [-r | -l START-END]


    
 [-e PATTERN]
            [--style STYLE] [--style-help] [--no-local-style] [-p]
            [-vv]
            [files ...]

必选参数:

files 需要被格式化的文件

可选参数:
-h, --help 显示帮助信息
-v, --version 显示程序的版本号
-d, --diff 打印格式化前后差异
-i, --in-place 格式化文件并替换
-q, --quiet 什么都不输出
-r, --recursive 在目录上递归运行
-l START-END, --lines START-END 重新格式化的行范围,基于一个
-e PATTERN, --exclude PATTERN 需要排除的文件
--style STYLE 指定格式化样式(例如“pep8”或“google”)
-p, --parallel 并行格式化(多个文件时有效)
-vv, --verbose 在处理时打印出文件名

举个例子,如果我们有以下的混乱格式代码 1.py :

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 -i 1.py

效果如下:

3.Yapf 作为模块使用


Yapf 不仅可以在命令行中使用,我们还可以在项目运行时使用。

一个比较常见的场景是用户在你的 web 网站上提交了 python 代码,你希望能一件格式化这些代码,那将 yapf 作为格式化的模块则再好不过。

Yapf 最主要的两个 API 是 FormatCode 和 FormatFile:

from yapf.yapflib.yapf_api import FormatCode

formatted_code, changed = FormatCode("f ( a = 1, b = 2 )")
print(formatted_code)
# 'f(a=1, b=2)\n'
print(changed)
# True

你还可以传递 style_config 决定使用哪种指南做格式化:

from yapf.yapflib.yapf_api import FormatCode

print(FormatCode("def g():\n return True", style_config='pep8')[0])
# 'def g():\n return True\n'

FormatFile,这个函数可以从文件中读取代码并格式化:

from yapf.yapflib.yapf_api import FormatFile 
print(open("foo.py").read())
# a==b
reformatted_code, encoding, changed = FormatFile("foo.py")
print(formatted_code)
# 'a == b\n'
print(encoding)
# 'utf-8'
print(changed)
# True

如果你添加 in_place 参数,它将把格式化后的代码写回文件中:

from yapf.yapflib.yapf_api import FormatFile 
print(FormatFile("foo.py", in_place=True)[:2])
# (None, 'utf-8')

print(open("foo.py").read())
# a == b

End

崔庆才的新书《Python3网络爬虫开发实战(第二版)》已经正式上市了!书中详细介绍了零基础用 Python 开发爬虫的各方面知识,同时相比第一版新增了 JavaScript 逆向、Android 逆向、异步爬虫、深度学习、Kubernetes 相关内容,‍同时本书已经获得 Python 之父 Guido 的推荐,目前本书正在七折促销中!

内容介绍:《Python3网络爬虫开发实战(第二版)》内容介绍



扫码购买






点个在看你最好看

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/149650
 
422 次点击