大部分人使用python中的代码格式化工具时都会选择autopep8之类的工具,这些工具可能有一定的局限性,比如不会重新格式化已经符合 pep8 的代码。
而本文即将介绍的 yapf,不仅能将代码格式化为符合 pep8 代码指南的格式,还能格式化为符合 google 代码指南的格式,可选项更多,让你的代码更加漂亮。
1.准备
开始之前,你要确保python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细python安装指南 进行安装。
**(可选1) **如果你用python的目的是数据分析,可以直接安装anaconda:python数据分析与挖掘好帮手—anaconda,它内置了python和pip.
**(可选2) **此外,推荐大家用vscode编辑器,它有许多的优点:python 编程的最好搭档—vscode 详细指南。
请选择以下任一种方式输入命令安装依赖 :
windows 环境 打开 cmd (开始-运行-cmd)。macos 环境 打开 terminal (command+空格输入terminal)。如果你用的是 vscode编辑器 或 pycharm,可以直接使用界面下方的terminal.pip install yapfyapf 支持 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 ydef 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 formatcodeformatted_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 formatcodeprint(formatcode(def g():n return true, style_config='pep8')[0])# 'def g():n return truen'formatfile,这个函数可以从文件中读取代码并格式化:
from yapf.yapflib.yapf_api import formatfileprint(open(foo.py).read())# a==breformatted_code, encoding, changed = formatfile(foo.py)print(formatted_code)# 'a == bn'print(encoding)# 'utf-8'print(changed)# true如果你添加in_place参数,它将把格式化后的代码写回文件中:
from yapf.yapflib.yapf_api import formatfileprint(formatfile(foo.py, in_place=true)[:2])# (none, 'utf-8')print(open(foo.py).read())# a == b
三星Galaxy Note9提前亮相 为下半年与苹果博弈做准备
高频开关电源,高频开关电源是什么意思
基于ClearEdgeTM技术的低功耗版HDMI发射机
工业平板电脑的维护需要注意什么
特斯拉和宝马等获批欧盟 35 亿美元电池项目援助
Yapf:一个格式化 Python 代码的好帮手
人工气候室的作用及功能
联想搭载高通骁龙855芯片 推出全球首款5G手机
彭博社:廉价智能手机在中国已死,高端市场竞争加剧
简单介绍定向耦合器的基础知识
使用先进的信号分析技术确定WLAN发射机降级的原因
海绵城市正在着力打造5G全域应用建设智慧城市
浅谈小米“手机 X AIoT”战略发展历程
人脸门禁怎样抗击疫情
AI新职业花式登场,人机交互等前沿技术仍待突破
韩国已有超过5万家酒店支持数字货币支付
强渡大渡河!华为云 GaussDB 成功支撑华为 MetaERP 系统全面替换
中国联通已在雄安新区完成了5G规模部署
人工智能和区块链会擦出怎样的火花
FP5207在拉杆音箱中的运用