(数据科学学习手札159)使用ruff对Python代码进行自动美化
本文示例代码已上传至我的
Github仓库https://github.com/CNFeffery/DataScienceStudyNotes
1 简介
大家好我是费老师,在日常编写Python代码的过程中,由于个人经验及编程习惯上的差异,有些人写出的代码可读性很高,一眼看上去就非常整洁易懂,而有些人写出的代码则十分“潦草随意”,读起来颇为费劲。
想要写出格式工整、可读性强的Python代码,除了需要在编写大量代码的过程中逐渐养成良好习惯外,还可以结合代码格式化工具实现代码的自动格式美化,经典的Python代码格式化工具有autopep8、black、yapf等,均可在vscode、pycharm等主流ide中安装相关插件进行快捷使用。
而去年大火的代码静态分析工具ruff,主要功能中也包含了代码格式化功能,由于其底层基于rust编写,因此执行相关功能时的运算速度超快,据官方称可达到其他同类型工具的10~100倍之多,今天的文章中,费老师我就将为大家介绍基于ruff的代码格式化常用功能。

2 使用ruff进行Python代码格式化
2.1 ruff的安装
在主流的ide中,我们可以直接安装ruff相关插件,以vscode为例,在拓展中搜索ruff进行安装即可:

2.2 ruff代码格式化常用功能
2.2.1 直接使用
默认条件下,安装完ruff插件后,在vscode中就可以直接使用快捷键shift+alt+f,针对当前编辑中的py文件进行格式美化,举个例子,假设我们原始的Python代码格式“一不小心”写成了下面的样子:
import os
# 提取目标路径下各文件的创建时间及最近修改时间
target_path ="target_path"
# 需要排除的文件拓展名
ignore_file_types =['.mp4','.avi', '.rmvb'
]
# 结果元组格式:(文件名,创建时间,最近修改时间)
files=[(file,os.path.getctime(os.path.join(target_path,file)),os.path.getmtime(
os.path.join(target_path,file) )) for file in os.listdir(target_path)
# 判断当前文件名是否为文件,且不在排除拓展名列表中
if os.path.isfile(os.path.join(target_path, file)) and
not any(file.endswith(ext) for ext in ignore_file_types
)]
在按下快捷键shift+alt+f后,心情顿时舒畅了~

2.2.2 配置格式化规则
ruff默认的格式化规则基本上兼容black,但如果你想要自定义调整部分的格式化规则,譬如在引号的使用上,你更倾向于使用单引号,在ruff中也可以很轻松的实现。
ruff中推荐以具体的项目为控制范围,通过在项目根目录中创建pyproject.toml或ruff.toml来编写具体的规则,譬如在下面的示例ruff.toml文件中,我们声明了优先使用单引号:
ruff.toml
[format]
# 使用单引号
quote-style = "single"
格式化结果中就会对应的优先使用单引号:

或是限制每行最多字符数量:
ruff.toml
# 限制每行最多20个字符
line-length = 20
[format]
# 使用单引号
quote-style = "single"

设置缩进使用单个Tab符(默认为4个空格):
ruff.toml
[format]
# 使用单引号
quote-style = "single"
# 缩进使用单个tab
indent-style = "tab"

且ruff还支持对docstring注释中的代码片段进行识别并格式化:
ruff.toml
[format]
# 使用单引号
quote-style = "single"
# 启用docstring代码片段格式化
docstring-code-format = true

更多有关ruff代码格式化功能的细节,请移步https://docs.astral.sh/ruff/formatter/了解更多。
以上就是本文的全部内容,欢迎在评论区与我们进行讨论~
(数据科学学习手札159)使用ruff对Python代码进行自动美化的更多相关文章
- (数据科学学习手札135)tenacity:Python中最强大的错误重试库
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在编写程序尤其是与网络请求相关的程序, ...
- (数据科学学习手札101)funcy:Python中的函数式编程百宝箱
本文示例文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在使用Python完成日常任务时,经常会遇到 ...
- (数据科学学习手札137)orjson:Python中最好用的json库
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,我们在日常使用Pytho ...
- (数据科学学习手札142)dill:Python中增强版的pickle
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,相信不少读者朋友们都在Pyth ...
- (数据科学学习手札55)利用ggthemr来美化ggplot2图像
一.简介 R中的ggplot2是一个非常强大灵活的数据可视化包,熟悉其绘图规则后便可以自由地生成各种可视化图像,但其默认的色彩和样式在很多时候难免有些过于朴素,本文将要介绍的ggthemr包专门针对原 ...
- (数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)
一.简介 接着几个月之前的(数据科学学习手札31)基于Python的网络数据采集(初级篇),在那篇文章中,我们介绍了关于网络爬虫的基础知识(基本的请求库,基本的解析库,CSS,正则表达式等),在那篇文 ...
- (数据科学学习手札49)Scala中的模式匹配
一.简介 Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍: 二.Scala中的模式匹配 2.1 基本格式 Scala中模式匹 ...
- (数据科学学习手札47)基于Python的网络数据采集实战(2)
一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集 ...
- (数据科学学习手札44)在Keras中训练多层感知机
一.简介 Keras是有着自主的一套前端控制语法,后端基于tensorflow和theano的深度学习框架,因为其搭建神经网络简单快捷明了的语法风格,可以帮助使用者更快捷的搭建自己的神经网络,堪称深度 ...
- (数据科学学习手札42)folium进阶内容介绍
一.简介 在上一篇(数据科学学习手札41)中我们了解了folium的基础内容,实际上folium在地理信息可视化上的真正过人之处在于其绘制图像的高度可定制化上,本文就将基于folium官方文档中的一些 ...
随机推荐
- gorm整理
目录 1. 约定 2. 结构体标签 3. 创建记录 4. 更新 5.删除 6. 查询 7.关联 8.链式操作 9.范围 10.多个立即执行方法的注意事项 11.错误处理 12.钩子 13.事务 14. ...
- TCP 中的 Delay ACK 和 Nagle 算法
哈喽大家好,我是咸鱼. 今天分享一篇大佬的文章,作者:卡瓦邦噶! 文章链接:https://www.kawabangga.com/posts/5845 教科书介绍的 TCP 内容通常比较基础:包括三次 ...
- C#版开源免费的Bouncy Castle密码库
前言 今天大姚给大家分享一款C#版开源.免费的Bouncy Castle密码库:BouncyCastle. 项目介绍 BouncyCastle是一款C#版开源.免费的Bouncy Castle密码库, ...
- Swagger (API框架,API 文档 与API 定义同步更新)
1.依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring ...
- 基于ads1292的心率呼吸信号检测解决方案开发阶段总结
前记 在医疗可穿戴领域,ads1292是一个无法绕过去的存在.今年几个项目产品都和这个芯片有关系. 从不了解到熟悉,算是踩了不少坑吧.对每次的项目进行复盘,是我这些年养成的最好的习惯了. ads129 ...
- 逆向通达信Level-2 续八 (BackTrace, Trace任意TdxW.exe内部函数, Breakin)
TdxW kun anti-debugging, i debug you without a debugger. 添加bt命令,BackTrace 下图是hack某一个函数后使用bt命令进行Trace ...
- struts1标签之
<logic:iterate>主要用来处理在页面上输出集合类,集合一般来说是下列之一: 1. java对象的数组 2. ArrayList.Vector.HashMap等 具体用法请参考s ...
- Ubuntu 14.04 Intel 处理器 硬编解码配置(Intel® Media Server Studio)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- API和String字符串介绍
API 1.如何使用Java已经写好的东西(方法,类) API(Application programming interface):应用程序编程接口 简单理解:API就是别人已经写好了的东西,我们不 ...
- 三维模型3DTile格式轻量化压缩处理效率提高的技术方浅析
三维模型3DTile格式轻量化压缩处理效率提高的技术方浅析 随着三维模型在各个领域的广泛应用,对于其格式的轻量化压缩处理和效率提高的需求也越发迫切.本文将介绍一些技术方法,帮助实现三维模型3DTile ...