# Python 学习笔记(五)--"高颜值" ## 1 简介 在日常编写 `Python`代码的过程中,由于个人经验及编程习惯上的差异,有些人写出的代码可读性很高,一眼看上去就非常整洁易懂,而有些人写出的代码则十分“潦草随意”,读起来颇为费劲。 想要写出格式工整、可读性强的 `Python`代码,除了需要在编写大量代码的过程中逐渐养成良好习惯外,还可以结合代码格式化工具实现代码的自动格式美化,经典的 `Python`代码格式化工具有 `autopep8`、`black`、`yapf`等,均可在 `vscode`、`pycharm`等主流 `ide`中安装相关插件进行快捷使用。 而去年大火的代码静态分析工具 `ruff`,主要功能中也包含了代码格式化功能,由于其底层基于 `rust`编写,因此执行相关功能时的运算速度超快,据官方称可达到其他同类型工具的10~100倍之多⚡,今天的文章中,费老师我就将为大家介绍基于 `ruff`的代码格式化常用功能😉。 ![1713103685233](image/Python_study_5/1713103685233.png) ## 2 使用ruff进行Python代码格式化 ### 2.1 ruff的安装 在主流的 `ide`中,我们可以直接安装 `ruff`相关插件,以 `vscode`为例,在拓展中搜索 `ruff`进行安装即可: ![1713103700680](image/Python_study_5/1713103700680.png) ### 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`文件中,我们声明了优先使用单引号: ``` [format] # 使用单引号 quote-style = "single" ``` 格式化结果中就会对应的优先使用单引号 或是限制每行最多字符数量: ``` # 限制每行最多20个字符 line-length = 20 [format] # 使用单引号 quote-style = "single" ``` 设置缩进使用单个 `Tab`符(默认为4个空格): ``` [format] # 使用单引号 quote-style = "single" # 缩进使用单个tab indent-style = "tab" ``` 且 `ruff`还支持对docstring注释中的代码片段进行识别并格式化: ``` [format] # 使用单引号 quote-style = "single" # 启用docstring代码片段格式化 docstring-code-format = true ``` 更多有关 `ruff`代码格式化功能的细节,请移步 `https://docs.astral.sh/ruff/formatter/`了解更多。