一个简单的步骤让你的 Python 代码更干净

news2025/2/24 16:37:00

说起来容易做起来难,我们都知道代码可读性非常重要,但是写的时候总是随心所欲,不考虑类型提示、import 排序、PEP8 规范。今天分享一个小技巧,通过一个简单的步骤就可以让你的 Python 代码更干净。

这就是 pre-commit:

可以让你的代码提交之前自动检查是否符合你想要的规范。

使用之前,先 pip 安装一下:

pip install pre-commit

然后在项目的根目录下创建两个文件:.pre-commit-config.yaml 和 pyproject.toml。

.pre-commit-config.yaml 文件内容如下:

exclude: _pb2\.py$
repos:
  - repo: https://github.com/psf/black
    rev: 22.3.0
    hooks:
      - id: black
        args: [--skip-string-normalization]
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.0.1
    hooks:
      - id: check-docstring-first
      - id: check-json
      - id: check-merge-conflict
      - id: check-yaml
      - id: debug-statements
      - id: end-of-file-fixer
      - id: trailing-whitespace
      - id: requirements-txt-fixer
  - repo: https://github.com/pre-commit/pygrep-hooks
    rev: v1.9.0
    hooks:
      - id: python-check-mock-methods
      - id: python-use-type-annotations
  - repo: https://github.com/pre-commit/mirrors-mypy
    rev: "v0.910"
    hooks:
      - id: mypy
        args:
          [
            --ignore-missing-imports,
            --warn-no-return,
            --warn-redundant-casts,
            --disallow-incomplete-defs,
          ]
        additional_dependencies: [types-all]
  - repo: https://github.com/PyCQA/isort
    rev: 5.9.3
    hooks:
      - id: isort
        args: [--profile, black, --filter-files]

这里面配置了 black、mypy、check-docstring-first、isort 等工具,id 就是对应的工具,可以说这个配置文件基本上就够用了。

在 .pre-commit-config.yaml 文件中,我们可以指定将使用哪些挂钩,在 pyproject.toml 中,我们可以为这些单独的钩子指定参数。

pyproject.toml 文件内容如下:

[tool.black]
line-length = 88
target-version = ["py38"]

[tool.isort]
profile = "black"
multi_line_output = 3

这里配置了 black 和 isort 的相关配置。

然后执行在项目的根目录执行 pre-commit install 命令,就可以安装 pre-commit 插件。

然后每次更新代码,提交代码时,这些钩子都会触发,会自动执行如下操作:

  1. 排序 import

  2. PEP8 的格式代码

  3. 检查您的 yaml 和 json 文件的正确性

  4. 类型检查(如果你使用了类型提示)

最后

你可以将这两个文件拷贝到自己的项目根目录中,然后执行一次 pre-commit install,这样每次提交代码的时候,都是干净的代码,是不是很方便?

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

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

相关文章

pyQt5和pySide2 环境配置以及部分问题解决方案

首先介绍需要安装的内容: 1、Qt 2、python3.7.5(查找资料过程中有注意到说是3.8及3.8以上版本Qt可能不兼容)【记得勾选添加到环境变量中选项】 3、pip(主要用来下载使用) 4、pySide2、PyQt5、pyqt5-tools 5、如果有使…

vue 前端国际化方案

方案介绍: 1.使用i18n(使用步骤可百度,要注意版本问题) 2.整合ele-ui的国际化方案(百度,几行添加一下即可) 3.数据信息的配置(重头戏,以下详细介绍)excel转j…

中科院高分区盘点:1区新刊,影响因子即将突破7分(含IEEE)

高分新刊——计算机领域 1区人工智能类SCI&EI 【出版社】IEEE 【自引率】4.30%(低) 【国人占比】13.40% 【期刊简介】IF:6.5-7.0,JCR1区,中科院3区 【检索情况】SCI&EI 双检,正刊 【参考周期】3-5个月左…

Hierarchical Fusion Model (2019 ACL)三种模态的层次融合

论文题目(Title):Multi-Modal Sarcasm Detection in Twitter with Hierarchical Fusion Model 研究问题(Question):主要研究了推特中由文本和图像组成的推文的多模态讽刺检测 研究动机(Motiva…

二肽Phe-Pro,7669-65-0,FP

Substrate for skin fibroblast prolidase.皮肤成纤维细胞prolida酶的底物。 编号: 131185中文名称: 二肽Phe-Pro英文名: Phe-ProCAS号: 7669-65-0单字母: H2N-FP-OH三字母: H2N-Phe-Pro-COOH氨基酸个数: 2分子式: C14H18N2O3平均分子量: 262.3精确分子量: 262.13等电点(PI): 6…

【学习笔记02】vue指令学习

目录 一、常用的指令 (一)v-bind 1、绑定样式 2、$event (二)v-on 1、v-on修饰符 2、按键修饰符 3、案例:Todolist (三)v-model 1、 v-model和v-bind的区别 2、案例:数…

wy的leetcode刷题记录_Day60

wy的leetcode刷题记录_Day60 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间:2022-12-21 前言 这几天身体不舒服,现在重新开始更新。 目录wy的leetcode刷题记录_Day60声明前言1753. 移除石子的最大得分题目介绍思路代码收获…

Java 异常(Exceptions)

目录 1、什么是异常? 2、捕获并处理异常 try-with-resources 语句 3、通过方法抛出异常 自定义异常 1、什么是异常? 定义:异常是在程序执行过程中发生的一种事件,它会中断程序指令的正常流程。 当方法中发生错误时&#xff0…

2022年我国止血药行业市场规模不断增长 激活凝血因子活性药是主流产品

根据观研报告网发布的《中国止血药市场现状深度研究与发展前景分析报告(2022-2029年)》显示,止血药主要是指凡能够制止体内外出血的药物,主要适用于各部位出血病症,如咯血、衄血、吐血、尿血、便血、崩漏、紫癜及创伤出…

记录一次使用 Ubuntu 编译 Wakaama 踩坑过程

1. 背景 公司项目需要使用 LwM2M 协议,由于是个相对冷门的小众协议,客户端模拟器几乎没有,只有 Eclipse Wakaama 相对来说功能齐全、易用,但是这个软件没有编译好的程序包,只能从 Github 拉取源码手动编译运行。 不知道…

操作系统期末知识点复习

操作系统知识点总结 参考用书:计算机操作系统(第四版)汤小丹等著 1、必考知识点 第一章 操作系统引论 操作系统的概念及特征操作系统的运行环境 第二章 进程的描述与控制 进程状态与转换同步与互斥的基本概念信号量信号量的基本应用生产者消…

Nacos的配置中心的了解

目录 1. 为何需要配置中心 2. nacos的配置中心 2.1 配置示例 2.2 多环境配置 2.3 GROUP 2.4 namespace 1. 为何需要配置中心 没有配置中心的情况下会出现什么情况: 如果没有配置中心,则各个服务的配置文件分散在各个项目中,不方便维护…

不用光盘重装系统如何操作

​光盘重装系统是之前十分常用的系统安装方法,随着科技的飞速发展,现如今重装系统的方法五花八门,一键重装系统以及U盘重装系统等方法的出现取代了光盘重装系统,这里就来介绍一下不用光盘重装系统操作方法。 工具/原料: 系统版本:windows10系统 品牌型…

Kotlin协程笔记:CoroutineScope管理协程

CoroutineScope 是实现协程结构化并发的关键。使用 CoroutineScope,可以批量管理同一个作用域下面所有的协程。 CoroutineScope 与 结构化并发 launch、async 被定义成了 CoroutineScope 扩展函数。在调用 launch 之前,必须先获取 CoroutineScope。 pub…

高级又高效的属性表编辑技术,你值得拥有!

当你要按关键词选择内容,无从下手? 当你要修改字段的部分内容,不知所措? 当你要提取出字段的某些内容,毫无头绪? 当你要按照位数来提取字符内容,力不从心? 当你要为字段补充一些新的内容,目瞪口呆? 当你要把一个字段分割成多个字段,抓耳挠腮? ...... 属性表的…

CUDA ~ WarpReduce

又是一篇关于cuda的 要好好学学哦, CUDA 编程进阶分享,一些 warp 的使用 如何实现一个高效的Softmax CUDA kernel?多少还是有些细节没有理解,恰好最近要做一个类似的 ReduceScale Kernel,原理机制还是比较相似的,所以…

CSS -- 10. 移动WEB开发之rem布局

文章目录移动WEB开发之rem布局1 rem基础2 媒体查询2.1 什么是媒体查询2.2 语法规范2.3 mediatype 查询类型2.4 关键字2.5 媒体特性2.6 案例:根据页面宽度改变背景颜色2.7 媒体查询rem实现元素动态大小变化2.8 针对不同的屏幕尺寸引入不同的样式文件3 Less基础3.1 维…

8000字详解Thread Pool Executor

摘要:Java是如何实现和管理线程池的?本文分享自华为云社区《JUC线程池: ThreadPoolExecutor详解》,作者:龙哥手记 。 带着大厂的面试问题去理解 提示 请带着这些问题继续后文,会很大程度上帮助你更好的理解相关知识点。pdai …

数据泄露成数据安全最大风险,企业如何预防呢?

据《中国政企机构数据安全风险分析报告》显示,2022年1月——2022年10月,安全内参共收录全球政企机构重大数据安全报道180起,其中数据泄露相关安全事件高达93起,占51.7%。与近三年平均每月公开报道频次相比,2022年相较前…

如何在3DMAX中不使用Maxscript或插件破碎物体对象?

在3DMAX中破碎物体我们通常会借助Maxscript或者插件,其实,不借助任何其他工具,3DMAX也可以实现对物体的破碎,下面就给大家介绍一种方法: 1.首先,创建一个破碎对象,比如一个石块(或者…