一文掌握提升 Python 代码质量的最佳伴侣工具:black、isort、flake8 和 mypy

news2025/1/13 2:55:39

🍉 CSDN 叶庭云https://yetingyun.blog.csdn.net/


在 Python 项目开发中,为了保持代码质量和提高开发效率,我们常需借助一些工具。今天,我将为大家介绍四个 Python 代码工程的得力助手:black、isort、flake8 和 mypy。

🚀🚀 本文的思维导图如下所示:

在这里插入图片描述

使用这四个工具的有机结合,能够编写出更为规范、整洁的 Python 代码。然而,代码的具体质量仍然取决于开发者自身,工具只是辅助手段。请牢记这一点。


一、black

什么是 Black?

Black 是一个开源的 Python 代码格式化工具,旨在提供一致的代码风格并提高代码的可读性和可维护性。它会自动将代码格式化为符合 PEP 8 规范的标准风格,因此被称为 “零妥协代码格式化工具”。

Black 24.4.2 官方文档:https://black.readthedocs.io/en/stable/getting_started.html

为什么使用 Black?

使用 Black 的主要原因如下:

  • 一致性:通过自动格式化代码,Black 确保了整个项目中的代码风格一致,减少了代码审查过程中的争议和耗时。
  • 简化代码审查:由于 Black 自动处理代码格式问题,开发者可以将更多精力放在代码逻辑和功能上,而非格式细节
  • 提高可读性:Black 强制执行标准化的格式,使代码更容易阅读和理解,尤其是在团队合作中。
  • 节省时间:自动格式化代码可以显著减少开发者手动调整代码格式的时间,提高开发效率。

具体怎么做?

安装 Black

在命令行中使用 pip 安装 Black:

pip install black

如果需要在 Jupyter Notebook 中使用,则运行:

pip install black[jupyter]

需要注意的是,Black 需要 Python 3.8 以上的版本。

使用 Black

Black 使用非常简单,以下是一些基本用法:

  • 格式化文件:在命令行中运行以下命令即可格式化文件:
    black your_file.py
    
  • 格式化目录:格式化目录中的所有 Python 文件:
    black your_directory/
    
  • 跳过字符串格式化:如果项目要求保留单引号,可以使用 -S 选项:
    black -S your_file.py
    
高级用法和配置

Black 还支持一些高级配置选项,可以通过命令行参数实现:

  • 指定行宽:使用 --line-length 选项来设置自定义代码最大行宽:
    black --line-length 100 your_file.py
    
  • 排除特定文件或目录:使用 --exclude 选项排除特定的文件或目录:
    black --exclude "tests/" your_directory/
    
  • 仅检查不修改:使用 --check 选项只检查格式而不修改文件:
    black --check your_file.py
    
集成到 IDE 中

Black 可以集成到多种编辑器和 IDE 中,如 VS Code、PyCharm、Sublime Text 等。以 VS Code 为例,可以在扩展市场中搜索并安装 Black Formatter 扩展。

总结

Black 是一个强大的 Python 代码格式化工具,通过其自动化和一致性的特点,帮助开发者减少代码格式问题,提高代码审查效率和项目可维护性。无论是个人项目还是团队合作,Black 都能显著提升开发体验和代码质量。


二、isort

是什么?

isort 是一个 Python 实用工具库,用于自动排序和格式化 Python 文件中的导入语句。它能够将导入语句按照字母顺序排列,并自动分组成不同的部分,例如标准库、第三方库和项目内部模块(自己封装、实现的模块)。

isort 官方文档:https://pycqa.github.io/isort/

为什么?

导入语句规范化有助于提高代码的可读性和维护性,尤其在团队协作和大型项目中显得尤为重要。手动管理导入语句的顺序不仅耗时,而且容易出错。isort 自动化这一过程,确保所有导入语句都符合特定的格式和排序规则,从而减少代码审查过程中对导入顺序的讨论。

具体怎么做?

安装 isort

可以通过 pip 来安装 isort:

pip install isort
基本使用
  • 对单个文件排序:

    isort your_script.py
    
  • 对整个项目中的所有 Python 文件排序:

    isort .
    
进行配置

可以通过配置文件(如 pyproject.toml.isort.cfgsetup.cfg 等)自定义 isort 的行为。例如,在 pyproject.toml 中:

[tool.isort]
profile = "black"
line_length = 88

上述配置指示 isort 使用与 black 代码格式化器兼容的配置,并将最大代码行长度设置为 88。

集成到编辑器或持续集成流程
  • 编辑器插件:isort 提供了多种编辑器插件支持,包括 VSCode、PyCharm 等,方便在保存文件时自动排序导入语句。
  • 预提交钩子(pre-commit hook):isort 官方支持 pre-commit,确保在代码提交前自动检查和修复导入语句的顺序。
检查导入顺序是否正确

使用 -c--check-only 选项可以仅检查导入顺序是否正确,而不实际修改文件:

isort -c your_script.py

如果导入顺序不正确,会输出相应的错误信息。通过使用 isort,可以显著提高代码的一致性和可读性,特别是在大型项目和团队协作中,自动化工具的使用能够大幅减少手动操作的错误和时间消耗。

综上所述,isort 是一个强大且高效的工具库,可以帮助 Python 开发人员自动化和标准化导入语句的管理,为代码审查和维护提供了极大的便利。


三、flake8

flake8 是什么?

flake8 是一个用于 Python 编程语言的静态代码分析工具,它结合了多个工具来检查代码质量和风格一致性。具体来说,flake8 集成了以下三种工具:

  • PyFlakes:用于检查代码中的错误。
  • pycodestyle:用于检查代码是否符合 PEP 8 编码规范。
  • Ned Batchelder 的 McCabe script:用于检查代码的复杂度。

flake8 官方文档:https://flake8.pycqa.org/en/latest/

为什么使用 flake8?

使用 flake8 有以下几个主要原因:

  1. 代码质量保障:自动检测代码中的错误,帮助开发者在早期发现潜在问题。
  2. 风格一致性:确保代码符合 PEP 8 标准,提升代码的可读性和一致性。
  3. 复杂度控制:分析代码的复杂度,提醒开发者避免过于复杂的代码结构。
  4. 可扩展性强:支持第三方插件,可以根据需要自定义检查规则。

具体怎么做?

安装 flake8
  1. 打开终端(或命令行界面)。

  2. 运行以下命令通过 pip 安装 flake8:

    python -m pip install flake8
    

    这条命令会自动安装 flake8 及其所有必要的依赖项。

使用 flake8
  • 基本用法

    • 检查特定文件:
      flake8 path/to/code/to/check.py
      
    • 检查整个目录:
      flake8 path/to/code/
      
      这将会递归检查目录下的所有文件。
  • 选择特定的错误或警告

    • 仅查看特定警告或错误:
      flake8 --select E123,W503 path/to/code/
      
    • 忽略特定的警告或错误:
      flake8 --ignore E24,W504 path/to/code/
      
      可以指定多个错误及警告,用逗号分隔。
  • 配置 flake8

    • 可以通过配置文件来设置全局和项目级的 flake8 选项,例如在项目根目录下创建一个 .flake8 文件,并配置其中的选项:
      [flake8]
      max-line-length = 88
      exclude = venv, tests
      
      这样可以避免在每次运行 flake8 时都重复输入相同的命令行参数。

通过以上步骤,您可以有效地使用 flake8 来帮助提升代码质量、保持风格一致性并控制复杂度。建议参考官方文档获取更多详细的用法和配置示例。


四、mypy

是什么?

mypy 是 Python 的一个静态类型检查工具。它通过在代码中添加类型注解,帮助开发者在编写代码时发现潜在的类型错误,从而提高代码质量和可读性。mypy 允许在 Python 这种动态类型语言中使用静态类型检查的优点。

mypy 官方文档:https://mypy.readthedocs.io/en/stable/

为什么?

使用 mypy 的主要原因有以下几点:

  • 提高代码质量与可读性:通过在代码中加入类型注解,可以使代码更加易读,明确变量和函数的预期类型,从而减少理解和维护代码所需的时间。
  • 捕获潜在错误:mypy 可以在代码运行前发现类型错误,避免运行时才发现的问题,从而减少调试时间。
  • 文档化作用:类型注解可以作为代码的一部分,有助于自动生成文档和辅助开发者理解代码。

具体怎么做?

安装 mypy

首先,你需要安装 mypy,可以使用以下 pip 命令:

pip install mypy
添加类型注释

在代码中添加类型注释,可以使用 Python 提供的 typing 模块。例如:

from typing import List, Tuple

def add_numbers(x: int, y: int) -> int:
    return x + y

def process_data(data: List[Tuple[str, int]]) -> None:
    for name, age in data:
        print(f"Name: {name}, Age: {age}")

data_list = [("Alice", 25), ("Bob", 30), ("Charlie", 22)]
process_data(data_list)
运行 mypy

在添加了类型注释之后,可以使用 mypy 来进行类型检查。运行以下命令:

mypy your_code.py

如果代码中有类型错误,mypy 会显示错误信息。例如:

def add(x: int, y: int) -> int:
    return x + y

result = add(10, "20")  # 错误:第二个参数应该是 int 类型

运行 mypy 后,会提示类似这样的错误信息:

error: Argument 2 to "add" has incompatible type "str"; expected "int"
配置 mypy

你还可以通过配置文件来定制 mypy 的行为。创建一个 mypy 配置文件(例如 mypy.ini),内容如下:

[mypy]
python_version = 3.8
warn_return_any = True
warn_unused_ignores = True

使用配置文件运行 mypy:

mypy --config-file mypy.ini your_code.py

通过这些步骤,开发者可以逐步将 mypy 集成到现有的项目中,逐步为代码添加类型注释,提升代码的质量和可维护性。

总结

mypy 是一个强大的工具,通过在 Python 代码中引入类型注解,帮助开发者在编写代码时发现潜在的类型错误,提升代码的质量和可读性。通过简单的安装、类型注释以及运行 mypy 进行检查,可以显著提高开发效率并减少错误发生。


  • Python 字符串应该用双引号还是单引号?

  • 在 VSCode 中编写 Python 代码,代码规范工具介绍与推荐

  • Python 中 20 个提高代码质量的测试工具

  • Python 工程的最佳伴侣:isort、flake8、black 和 mypy

  • PEP 8 – Style Guide for Python Code

  • Google Python 风格指南 - 内容目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1854163.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

风险评估概念

渗透服务只是风险评估的一种内容 风险评估的概念 是识别,控制,降低,或者消除可能影响到信息系统的安全风险过程。 风险评估的定义: 就是量化测评一种事情带来的影响,整个量化的过程是偏主观化(客户觉得) 风险的特…

AI 开发平台(Coze)搭建小游戏《挑战花光10亿》

前言 本文讲解如何从零开始,使用扣子平台去搭建一个小游戏 这是成品链接:挑战花光10亿 - 扣子 AI Bot (coze.cn) 欢迎大家去体验一下 效果 正文 什么是coze平台? 扣子(Coze)是字节跳动推出的一站式 AI 开发平台&am…

(4) cmake编译静态库和动态库

文章目录 静态库整体代码动态库编译整体代码执行结果(静态) 静态库整体代码 static.h #pragma onecevoid static_demo();static.cpp #include "static.h" #include <iostream>void static_demo(){std::cout<<"static demo"<<std::end…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-26网络中的网络NiN

26网络中的网络NiN import torch from torch import nn import liliPytorch as lp import matplotlib.pyplot as plt# 定义一个NiN块 def nin_block(in_channels, out_channels, kernel_size, strides, padding):return nn.Sequential(# 传统的卷积层nn.Conv2d(in_channels, ou…

个人成长的利器:复盘教你如何避免重蹈覆辙

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热爱技术和分享&#xff0c;欢迎大家交流&#xff0c;一起学习进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 最近忙着学习和工作&#xff0c;更新比较少&#xff0c;期间一直在思考如何才能快速…

BLDC无感控制策略

本文根据 BLDC 的电路模型推导了一个简 化磁链方程来估计转子位置,转速适用范围较 广;重点分析了反电动势和换相电流对转矩脉动 的影响;设计了一种BLDC的无速度传感器高速 驱动控制方案。通过试验验证了新型控制策略 的性能。 1 低速时的转子位置检测 图1 为高速无刷直流电…

高职人工智能专业实训课之“图像识别基础”

一、前言 随着人工智能技术的迅猛发展&#xff0c;高职院校对人工智能专业实训课程的需求日益迫切。唯众人工智能教学实训平台作为一所前沿的教育技术平台&#xff0c;致力于为学生提供高效、便捷的人工智能实训环境&#xff0c;特别在“图像识别基础”这一关键课程中&#xf…

四川汇聚荣科技有限公司怎么样?

在探讨一家科技公司的综合实力时&#xff0c;我们往往从多个维度进行考量&#xff0c;包括但不限于公司的发展历程、产品与服务的质量、市场表现、技术创新能力以及企业文化。四川汇聚荣科技有限公司作为一家位于中国西部的科技企业&#xff0c;其表现和影响力自然也受到业界和…

从零开始使用Surya-OCR——检测后的精细化处理框1:降噪二值图下的空白检测框删除

目录 一、动机 二、降噪二值化处理 1.一般二值化处理 2.降噪二值化处理 三、图片区域空白框判断 1.计算区域黑色像素比重 2.设置阈值筛选空白区域 3.可视化检查结果 一、动机 在使用 Surya 检测文本框时,对于一些特殊的文本,尤其是中文的古籍等,存在检测不准确的问题。常常…

国产AI算力训练大模型技术实践

ChatGPT引领AI大模型热潮&#xff0c;国内外模型如雨后春笋&#xff0c;掀起新一轮科技浪潮。然而&#xff0c;国内大模型研发推广亦面临不小挑战。面对机遇与挑战&#xff0c;我们需保持清醒&#xff0c;持续推进技术创新与应用落地。 为应对挑战&#xff0c;我们需从战略高度…

Program-of-Thoughts(PoT):结合Python工具和CoT提升大语言模型数学推理能力

Program of Thoughts Prompting:Disentangling Computation from Reasoning for Numerical Reasoning Tasks github&#xff1a;https://github.com/wenhuchen/Program-of-Thoughts 一、动机 数学运算和金融方面都涉及算术推理。先前方法采用监督训练的形式&#xff0c;但这…

【git1】指令,commit,免密

文章目录 1.常用指令&#xff1a;git branch查看本地分支&#xff0c; -r查看远程分支&#xff0c; -a查看本地和远程&#xff0c;-v查看各分支最后一次提交, -D删除分支2.commit规范&#xff1a;git commit进入vi界面&#xff08;进入前要git config core.editor vim设一下vi模…

《王者荣耀》国际服全球上线《Honor of Kings》海外下载榜首

原标题&#xff1a;《Honor of Kings》全球上线&#xff0c;国际玩家见证中国游戏魅力 易采游戏网6月23日独家消息&#xff1a;《王者荣耀》国际服《Honor of Kings》正式在全球160多个国家和地区上线&#xff0c;标志着这款源自中国的热门手机游戏迈向了国际舞台。尤其在加拿大…

Java面试八股之JVM永久代会发生垃圾回收吗

JVM永久代会发生垃圾回收吗 JVM的永久代&#xff08;PermGen&#xff09;在Java 8之前是存在的一部分&#xff0c;主要用于存储类的元数据、常量池、静态变量等。在这些版本中&#xff0c;永久代确实会发生垃圾回收&#xff0c;尤其是在永久代空间不足或超过某个阈值时&#x…

我在高职教STM32——LCD液晶显示(3)

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正因如此&#xff0c;才有了借助 CSDN 平台寻求认同感和成就…

【Linux详解】冯诺依曼架构 | 操作系统设计 | 斯坦福经典项目Pintos

目录 一. 冯诺依曼体系结构 (Von Neumann Architecture) 注意事项 存储器的意义&#xff1a;缓冲 数据流动示例 二. 操作系统 (Operating System) 操作系统的概念 操作系统的定位与目的 操作系统的管理 系统调用和库函数 操作系统的管理&#xff1a; sum 三. 系统调…

数据类型 运算符

基本数据类型与引用数据类型的区分 存储内容&#xff1a; 基本数据类型&#xff1a;直接存储实际的数据值&#xff0c;如整数、浮点数、字符等。引用数据类型&#xff1a;存储对象的引用&#xff08;内存地址&#xff09;&#xff0c;而不是对象本身。 内存分配&#xff1a; 基…

Qt——系统

目录 概述 事件 鼠标事件 进入、离开事件 按下事件 释放事件 双击事件 移动事件 滚轮事件 按键事件 单个按键 组合按键 定时器 QTimerEvent QTimer 窗口事件 文件 输入输出设备 文件读写类 文件和目录信息类 多线程 常用API 线程安全 互斥锁 条件变量…

matplotlib之常见图像种类

Matplotlib 是一个用于绘制图表和数据可视化的 Python 库。它支持多种不同类型的图形&#xff0c;以满足各种数据可视化需求。以下是一些 Matplotlib 支持的主要图形种类&#xff1a; 折线图&#xff08;Line Plot&#xff09;&#xff1a; 用于显示数据随时间或其他连续变量的…

珈和科技和比昂科技达成战略合作,共创智慧农业领域新篇章

6月14日&#xff0c;四川省水稻、茶叶病虫害监测预警与绿色防控培训班在成都蒲江举办。本次培训班由四川省农业农村厅植物保护站主办&#xff0c;蒲江县农业农村局、成都比昂科技筹办。四川省农业农村厅植物保护站及四川省14个市州36个县植保站负责人进行了观摩学习。 武汉珈…