一个简单的步骤让你的 Python 代码更干净
说起来容易做起来难,我们都知道代码可读性非常重要,但是写的时候总是随心所欲,不考虑类型提示、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/blackrev: 22.3.0hooks:- id: blackargs: [--skip-string-normalization]- repo: https://github.com/pre-commit/pre-commit-hooksrev: v4.0.1hooks:- 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-hooksrev: v1.9.0hooks:- id: python-check-mock-methods- id: python-use-type-annotations- repo: https://github.com/pre-commit/mirrors-mypyrev: "v0.910"hooks:- id: mypyargs:[--ignore-missing-imports,--warn-no-return,--warn-redundant-casts,--disallow-incomplete-defs,]additional_dependencies: [types-all]- repo: https://github.com/PyCQA/isortrev: 5.9.3hooks:- id: isortargs: [--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 插件。
然后每次更新代码,提交代码时,这些钩子都会触发,会自动执行如下操作:
排序 import
PEP8 的格式代码
检查您的 yaml 和 json 文件的正确性
类型检查(如果你使用了类型提示)

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

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

linux集群技术(二)--keepalived(高可用集群)(一)
高可用集群简介keepalived简介 1.高可用集群简介 1.1什么是高可用集群 高可用集群(High Availability Cluster,简称HA Cluster),是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务&am…...

C++中的类型转换
目录 一、C语言中的类型转换 二、C中的类型转化 2.1 static_cast 2.2 const_cast2.2 const_cast 2.3reinterpret_cast 重解释转换 2.4 dynamic_cast 动态转换(!!!) 3. explicit 防止隐式类型转化 一、C语言…...
如何使用raw socket发送UDP报文
前面写的一篇《Linux下如何在数据链路层接收原始数据包》举了一个实例,使用raw socket接收UDP数据报,但是发送一个数据包比接收要复杂一些,本文以一个实例说明如何使用raw socket发送一个UDP报文。 1. 前言 阅读本文前可以考虑先阅读一下我的另外一篇文章《Linux下如何在数据…...

【C++】文件IO流
一起来康康C中的文件IO操作吧 文章目录1.operator bool2.C文件IO流3.文件操作3.0 关于按位与的说明3.1 ifstream3.2 ofstream流插入文本3.3 ostringstream/istringstream3.4 stringstream3.5使用stringstream的注意事项结语1.operator bool 之前写OJ的时候,就已经用…...

JavaScript高级程序设计读书分享之4章——4.2执行上下文与作用域
JavaScript高级程序设计(第4版)读书分享笔记记录 适用于刚入门前端的同志 执行上下文 变量或函数的上下文决定 了它们可以访问哪些数据,以及它们的行为。在浏览器中,全局上下文就是我们常说的 window 对象(第 12 章会详细介绍)&am…...
函数的定义与声明
目录 1.函数的定义 2.函数声明 2.1 函数本地声明 2.2 函数外部声明 2.2.1函数的外部声明的好处和坏处 3.变量定义与声明 3.1变量定义 3.2变量声明 4.结构体的定义与声明 4.1结构体的定义 4.2结构体的声明 1.函数的定义 函数的定义即函数的具体实现。 2.函数声明 函数…...
C#部署非安装版(绿色版)mysql
C#部署非安装版(绿色版)mysql场景实现步骤场景 项目由bs和cs端组成,bs端的数据存储在了mysql中,cs依赖bs运行,bs会显示一些实时的信息。 需求是给客户一个安装包,简易操作就可安装完成。 使用版本…...

【RecBole-GNN/源码】RecBole-GNN中lightGCN源码解析
如果觉得我的分享有一定帮助,欢迎关注我的微信公众号 “码农的科研笔记”,了解更多我的算法和代码学习总结记录。或者点击链接扫码关注【RecBole-GNN/源码】RecBole-GNN中lightGCN源码解析 【RecBole-GNN/源码】RecBole-GNN中lightGCN源码解析 原文&…...

基于UIAutomation+Python+Unittest+Beautifulreport的WindowsGUI自动化测试框架common目录解析
文章目录1 框架工具说明2 技术栈说明3 框架截图4 源码解析/common目录4.1 common/baseinfo.py4.2 common/creenShot.py4.3 common/logOut.py4.4 common/reportOut.py4.5 common/sendMail.py注: 1、本文为本站首发,他用请联系作者并注明出处,谢…...

c++提高篇——queque容器
一、queque容器基本概念 Queue是一种先进先出(FIFO)的教据结构,它有两个出口 队列容器允许从一端新增元素,从另一端移除元素。队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为队列中进数据。 queque容器可以形象化为生活中…...

MyBatis-XML映射文件详解
一、XML 映射器 1.概述 使用 xml 文件去配置 SQL 代码,比传统的 jdbc 简单方便,能够少写代码,减少使用成本,提高工作效率。 1.1SQL 映射文件中的顶级元素 cache – 该命名空间的缓存配置。 cache-ref – 引用其它命名空间的缓…...

基于Java+SpringBoot+Vue+Uniapp前后端分离健身预约系统设计与实现
博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战✌ 博主作品:《微服务实战》专栏是本人的实战经验总结,《Spring家族及…...

webstom找不到vue全局组件
我真多服气,引入了自动组件注册 // 自动引入组建import { ElementPlusResolver } from unplugin-vue-components/resolversComponents({directoryAsNamespace: true,resolvers: [ElementPlusResolver()]}),生成了 components.d.ts 但是我在webstom中定义了标签 除非…...

ESP32设备驱动-内置霍尔磁力传感器数据读取
内置霍尔磁力传感器数据读取 文章目录 内置霍尔磁力传感器数据读取1、ESP32霍尔磁力传感器介绍2、软件准备3、硬件准备4、读取霍尔磁力传感值5、运行结果ESP32开发板具有内置霍尔效应传感器,可检测周围磁场的变化。本文将介绍如何在Arduino IDE中读取ESP32霍尔效应传感器的数据…...

2023面试准备之--mysql
文章目录mysql存储引擎索引聚簇索引和非聚簇索引事务锁MVCC机制(类似于copy on write)主从复制为什么要主从同步?怎么处理mysql的慢查询?mysql clint ---->server ----> 存储引擎 存储引擎 Innodb 是MySQL5.5版本及之后默…...

yolov5源码解读--训练策略
yolov5源码解读--训练策略超参数解读命令行参数train模型迭代超参数解读 hyp.scratch.yaml lr0: 0.0032 初始学习率 lrf: 0.12 使用余弦函数动态降低学习率(lr0*lrf) momentum: 0.843 动量 weight_decay: 0.00036 权重衰减项 warmup_epochs: 2.0 预热(…...

基于Django的员工管理系统
目录 一、新建项目 二、创建app 三、设计表结构 四、在MySQL中生成表 五、静态文件管理 六、添加页面 七、模板的继承 一、新建项目 django-admin startproject 员工管理系统 二、创建app startapp app01 三、设计表结构 app01/migrations/models.py from django.db impo…...

企业数智化转型在即,看看低代码软件公司如何做!
在信息爆炸的现代社会中,利用先进技术为企业提升办公协作效率,是一件事半功倍的事。当前,数字化转型升级已经是发展趋势,不少企业已经在朝着数智化转型方向迈进。作为一家低代码软件公司,流辰信息看到了市场发展前景&a…...
如何将pdf版的文书文字提取出来?
//在线工具地址https://ocr.bytedance.zj.cn/image/ImageText在当今信息爆炸的时代,图文并茂已经成为了一个广告宣传的常用方式。然而,图片中的文字信息往往难以获取,尤其对于那些需要快速获取信息的人们来说,阅读图片中的文字会是…...
设计模式——工厂模式
工厂模式 1.需求 抽奖活动 新用户注册即参与抽奖,奖品为:1.优惠券,2.优酷会员,3.京东卡 2.无模式 public class FreeGoodsController{public Result<?> send(AwardInfo awardInfo){int awardType awardInfo.getAward…...

PCB设计中降低噪声与电磁干扰的24个窍门
电子设备的灵敏度越来越高,这要求设备的抗干扰能力也越来越强,因此PCB设计也变得更加困难,如何提高PCB的抗干扰能力成为众多工程师们关注的重点问题之一。本文将介绍PCB设计中降低噪声与电磁干扰的一些小窍门。 下面是经过多年设计总结出来的…...
设计模式浅谈
什么是设计模式 设计模式是一种软件设计的思想。是在软件开发过程中,经过验证的、用于解决在特定环境下重复出现的、特定问题的解决方案。 设计模式的设计原则 原文链接:https://blog.csdn.net/qq_43471489/article/details/124067150 设计原则 1、…...
【kubernetes】使用crictl对k8s节点进行调试
crictl 是 CRI 兼容的容器运行时命令行接口,可以使用它来检查和调试 Kubernetes 节点上的容器运行时和应用程序。 可以Github上下载最新的发布版本: https://github.com/kubernetes-sigs/cri-tools/releases 包名大小发布日期...

数字经济讨论题
自2001年以来,Alphabet(Google)已进行了200多次并购。下面列出了并购年份。选择Alphabet进行的三笔并购讨论这些并购是如何使Alphabet拥有新的或增强的现有业务领域重要的是考虑何时进行所选择的收购。谷歌已经从一家提供互联网搜索引擎的公司…...

gcc/g++、动静态库、make/makefile
目录 gcc/g gcc和g的对比 "一段代码的使命" ●预处理 ●编译 ●汇编 ●链接 ●动/静态链接 make/makefile gcc/g gcc和g的对比 对于c文件而言,使用gcc或者g并没有什么区别。而对于cpp文件,在预处理、编译、汇编这三部分,…...
北京博奥智源,浅谈图书馆的馆情展示系统细则
功能特点: 1、支持智慧大屏的定制,内置精美的主题模板。 2、提供丰富的数据模块,可通过拖拽自由组合,配置灵活。 3、支持屏幕分辨率自定义,自适应屏幕大小。 4、支持背景颜色的更换,同时可上传图片更换背景…...

Docker----------day-mysql8主从复制
1.安装master 1.1拉取镜像 docker search mysql docker pull mysql mkdir -p /home/mysql8/data mkdir -p /home/mysql8/conf mkdir -p /home/mysql8/log1.2 2.启动交互式添加容器数据卷 #不添加容器数据卷 docker run -p 3307:3306 --name mysql_master -e MYSQL_ROOT_PASS…...

【Nginx】【一】Nginx简介
Nginx简介 背景介绍 Nginx(“engine x”)一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】,同时也是一个【POP3/SMTP/IMAP代理服务器】,是由伊戈尔赛索耶夫(俄罗斯人)使用C语言编写的,Nginx的第一个版本是200…...

跳跃游戏II-力扣45-java 动态规划
一、题目描述给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i j] 处:0 < j < nums[i] i j < n返回到达 nums[n - …...