当前位置: 首页 > news >正文

【Ubuntu20】VSCode Python代码规范工具配置 Pylint + Black + MyPy + isort

 常用工具:

在 Ubuntu20 下,有以下常见的 Python 代码工具:

静态分析工具:

Pylint 和 Flake8

功能范围:Pylint功能非常强大,能够检查代码质量、潜在错误、代码风格、复杂度等多个方面, 并生成详细的报告。Flake8 更专注于代码风格和语法检查,结合了多个独立的工具 pyflakes、pycodestyle 和 mccabe,提供一致的代码风格和静态错误检查。
配置选项:Pylint提供了广泛的配置选项,可以根据项目的需求进行灵活的定制。它允许你通过配置文件或命令行参数来调整规则的行为。Flake8的配置选项相对较少,主要通过配置文件进行设置。也提供了一些额外的插件和扩展,可以增加一些功能和定制选项。

自动格式化 Python 代码工具:

  1. 代码格式化风格 
    1. Yapf:Yapf 的格式化风格比较灵活。它默认会尽量减少代码的行数,同时也会考虑代码的可读性。例如,在格式化函数参数列表时,它可能会根据一定的规则对参数进行换行和缩进处理,以使得代码看起来紧凑但又不失条理。它也支持多种风格配置,用户可以通过配置文件指定缩进宽度、换行方式等格式化选项,以满足不同的代码风格需求。
    2. Autopep8:Autopep8 严格遵循 PEP8 风格指南进行格式化。PEP8 是 Python 社区广泛接受的代码风格规范,它对代码的缩进、空格使用、命名规范等方面都有详细的规定。Autopep8 会自动检测代码中不符合 PEP8 规范的部分,并将其转换为符合规范的形式。例如,它会确保每行代码的长度不超过 79 个字符(PEP8 推荐),正确使用空格来分隔运算符和操作数等。
    3. Black:Black 也遵循 PEP8 风格,但它的格式化风格更加强硬和一致。它会强制采用一种特定的格式化方式,几乎没有太多可调整的空间。例如,Black 对代码的缩进、括号的使用、函数和变量的命名等都有严格的格式化规则,并且会统一处理,使得所有被格式化的代码看起来非常整齐划一,风格高度一致。
  2. 可定制性程度 
    1. Yapf:Yapf 具有较高的可定制性。用户可以通过配置文件(.style.yapf)详细地指定各种格式化选项。比如,用户可以设置不同类型的缩进方式(空格或制表符)、缩进的宽度(可以是 2 个空格、4 个空格等)、每行的最大字符数、如何处理换行等众多选项。这使得 Yapf 能够适应不同开发者的个人偏好和不同项目的特殊要求。
    2. Autopep8:Autopep8 的可定制性相对较弱。它主要是围绕 PEP8 规范进行格式化,虽然可以通过一些命令行参数来控制部分行为,如忽略某些特定的错误代码或者指定最大行长度等,但整体上可定制的范围比较有限,因为它的主要目的是确保代码符合 PEP8 标准。
    3. Black:Black 的可定制性是三者中最低的。它有一套固定的格式化规则,几乎没有太多用户可自定义的选项。这种设计理念是为了减少在代码风格上的争论,强制推行一种统一的、被认为是最佳实践的格式化风格。虽然在某些情况下可能无法满足一些特殊的格式化需求,但它能够保证代码在不同项目和团队之间具有高度一致的风格。
  3. 对代码的修改程度和方式 
    1. Yapf:Yapf 在格式化时会根据配置和代码的实际情况进行相对灵活的修改。它会考虑如何在保持代码原有逻辑和结构的基础上,优化代码的布局和格式。例如,在处理长函数调用或者复杂的表达式时,它会根据用户设置的换行规则和缩进规则进行合理的换行和缩进,以提高代码的可读性,并且尽量减少对代码逻辑的干扰。
    2. Autopep8:Autopep8 主要是对不符合 PEP8 规范的代码进行纠正。它会逐个检查代码中的元素,如变量命名、空格使用、换行等方面是否符合 PEP8 标准。如果发现不符合的地方,就会按照 PEP8 的要求进行修改。例如,如果代码中存在不符合 PEP8 规范的变量命名(如使用了不符合命名规则的缩写),Autopep8 会将其修改为符合规范的命名。
    3. Black:Black 对代码的修改比较激进。它会按照自己的固定规则对代码进行全面格式化,不管代码原来的风格如何。例如,它可能会重新排列函数参数的顺序、改变括号的位置等,以达到它所要求的风格一致。这可能会导致代码在格式化后与原始版本相比,在布局和外观上有较大的变化,但它能够确保代码在格式化后完全符合它的风格规则。

Pylint 配置:

安装pylint插件,设置 setting.json:

    "pylint.importStrategy": "useBundled","pylint.args": ["--disable=invalid-name,missing-module-docstring","--disable=W0612,W0631,W0703,W0621,W0613,W0611,W1308,C0411,C0111,C0103,C0301,C0304,C0305,E1101,R0913,R0914,R0915,R0903" ,]

Black 配置:

安装Black插件,设置setting.json:

  "[python]": {"editor.defaultFormatter": "ms-python.black-formatter","editor.codeActionsOnSave": {"source.organizeImports": true},"editor.formatOnSave": true,},"black-formatter.args": ["--line-length","88"],

http://www.lryc.cn/news/479086.html

相关文章:

  • 游戏提示错误:xinput1_3.dll缺失?四种修复错误的xinput1_3.dll文件
  • YOLOv11融合IncepitonNeXt[CVPR2024]及相关改进思路
  • [Web安全 网络安全]-学习文章汇总导航(持续更新中)
  • Docker Compose部署Rabbitmq(Docker file安装延迟队列)
  • SpringBoot+FileBeat+ELK8.x版本收集日志
  • 本地模型导入ollama
  • scala Map训练
  • WorkFlow源码剖析——Communicator之TCPServer(下)
  • 数据结构与算法分析:专题内容——动态规划2之例题讲解(代码详解+万字长文+算法导论+力扣题)
  • 【Qt】QTreeView 和 QStandardItemModel的关系
  • containerd配置私有仓库registry
  • 深入解析语音识别中的关键技术:GMM、HMM、DNN和语言模型
  • C++循环引用
  • dayseven-因果分析-图模型与结构因果模型
  • 并发编程(8)—— std::async、std::future 源码解析
  • 稻米分类和病害检测数据集(猫脸码客 第237期)
  • HANDLINK ISS-7000v2 网关 login_handler.cgi 未授权RCE漏洞复现
  • 基于Multisim串联型连续可调直流稳压正电源电路设计与仿真
  • 【QT】Qt文件和多线程
  • PN结如何实现不同反向耐压及达到高反向耐压
  • 【bug日志-水】解决本地开发下代理和url同名导致刷新404的问题
  • Hive面试题-- 查询各类型专利 top10 申请人及专利申请数
  • 996引擎 - 活捉NPC
  • 航展畅想:从F35机载软件研发来看汽车车载软件研发
  • 用Dify搭建AI知识库
  • 架构师:如何提高web网站的请求并发响应量?
  • 图论基础--孤岛系列
  • Docker学习—Docker的安装与使用
  • HC-SR04超声波传感器详解(STM32)
  • 如何在BSV区块链上实现可验证AI