• (数据科学学习手札159)使用ruff对Python代码进行自动美化


    本文示例代码已上传至我的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/了解更多。


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

  • 相关阅读:
    Unity粒子系统ParticleSystem各模块及其参数学习
    小程序需带参数跳转
    图神经网络关系抽取论文阅读笔记(二)
    kaggle新赛:写作质量预测大赛【数据挖掘】
    腾讯云重新注册算不算新用户?算!
    LAMP架构-nginx并发优化
    StarRocks国产数据湖仓技术学习记录
    JAVA -华为真题-分奖金
    使用Http请求实现数据的批量导入
    【leetcode热题Hot100】——任务调度器
  • 原文地址:https://www.cnblogs.com/feffery/p/18128958