如何写出“高颜值”的Python代码

添加微信号"CNFeffery"备注"数据分析"入技术交流群

本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes

1 简介

大家好我是费老师,在日常编写Python代码的过程中,由于个人经验及编程习惯上的差异,有些人写出的代码可读性很高,一眼看上去就非常整洁易懂,而有些人写出的代码则十分“潦草随意”,读起来颇为费劲。

想要写出格式工整、可读性强的Python代码,除了需要在编写大量代码的过程中逐渐养成良好习惯外,还可以结合代码格式化工具实现代码的自动格式美化,经典的Python代码格式化工具有autopep8blackyapf等,均可在vscodepycharm等主流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.tomlruff.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/了解更多。

以上就是本文的全部内容,欢迎在评论区与我们进行讨论~

加入知识星球【我们谈论数据科学】

600+小伙伴一起学习!




· 推荐阅读 ·

dill:Python中增强版的pickle

我最常用的两个数据可视化软件,强烈推荐

pandas中新增的case_when()方法


相关推荐

  • 写给职场新人|从迷茫到屡获殊荣的技术人成长之路
  • 推荐一个开源的MES系统
  • 58.5K Star火火火!开源的企业级BI工具
  • AI员工「红衣」入职360;字节跳动否认“2023年利润狂飙60%”;Mixtral 8x22B开源模型登场 | 极客头条
  • 斩获 3.4k+ Star 的 C++ Insights:用编译器的视角看源码!
  • “Sora 无法让 AGI 到来,GPT 才是关键”,对话零一万物联合创始人潘欣 | AGI 技术 50 人
  • 离谱,0 offer!
  • 13号来上海跟敖丙交流AI对JAVA的影响吧!
  • 马赛克,克星,又火一个,已开源!
  • 外卖软件售后……这工资看得人直发毛
  • AirBattery:开源苹果设备电量信息展示工具
  • 时隔6年,武汉源创会回归,抓住大模型技术机遇
  • 国产开发工具deepin-IDE实现自举、已上架至deepin V23应用商店
  • 七年烧光15亿,Open AI投了四个月的公司倒闭了
  • 面试官:为什么忘记密码要重置而不是告诉你原密码?
  • 2024年Node.js精选:50款工具库集锦,项目开发轻松上手(四)
  • 今日代码大赏 | Java 实现快速排序算法
  • 奇安信的年终奖,出乎了所有人意料!
  • 小孩子也能看懂的线性回归算法
  • 西工大等提出大模型多智能体框架CRSEC,揭开AI社会的社交奥秘