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

一个简单的步骤让你的 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 插件。

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

  1. 排序 import

  1. PEP8 的格式代码

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

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

最后

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

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

相关文章:

  • linux集群技术(二)--keepalived(高可用集群)(一)
  • C++中的类型转换
  • 如何使用raw socket发送UDP报文
  • 【C++】文件IO流
  • JavaScript高级程序设计读书分享之4章——4.2执行上下文与作用域
  • 函数的定义与声明
  • C#部署非安装版(绿色版)mysql
  • 【RecBole-GNN/源码】RecBole-GNN中lightGCN源码解析
  • 基于UIAutomation+Python+Unittest+Beautifulreport的WindowsGUI自动化测试框架common目录解析
  • c++提高篇——queque容器
  • MyBatis-XML映射文件详解
  • 基于Java+SpringBoot+Vue+Uniapp前后端分离健身预约系统设计与实现
  • webstom找不到vue全局组件
  • ESP32设备驱动-内置霍尔磁力传感器数据读取
  • 2023面试准备之--mysql
  • yolov5源码解读--训练策略
  • 基于Django的员工管理系统
  • 企业数智化转型在即,看看低代码软件公司如何做!
  • 如何将pdf版的文书文字提取出来?
  • 设计模式——工厂模式
  • PCB设计中降低噪声与电磁干扰的24个窍门
  • 设计模式浅谈
  • 【kubernetes】使用crictl对k8s节点进行调试
  • 数字经济讨论题
  • gcc/g++、动静态库、make/makefile
  • 北京博奥智源,浅谈图书馆的馆情展示系统细则
  • Docker----------day-mysql8主从复制
  • 【Nginx】【一】Nginx简介
  • 跳跃游戏II-力扣45-java 动态规划
  • 【算法】用python代码解决“鬼谷问徒”问题