一个简单的步骤让你的 Python 代码更干净
2023-09-11 14:19:29 时间
说起来容易做起来难,我们都知道代码可读性非常重要,但是写的时候总是随心所欲,不考虑类型提示、import 排序、PEP8 规范。今天分享一个小技巧,通过一个简单的步骤就可以让你的 Python 代码更干净。
这就是 pre-commit:
![](https://img-blog.csdnimg.cn/img_convert/e20bf4b587882f71e8dd57fb0c75d7b0.png)
可以让你的代码提交之前自动检查是否符合你想要的规范。
使用之前,先 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 插件。
然后每次更新代码,提交代码时,这些钩子都会触发,会自动执行如下操作:
排序 import
PEP8 的格式代码
检查您的 yaml 和 json 文件的正确性
类型检查(如果你使用了类型提示)
![](https://img-blog.csdnimg.cn/img_convert/bd355fcb35ce8266d45f9197d4a00784.png)
最后
你可以将这两个文件拷贝到自己的项目根目录中,然后执行一次 pre-commit install,这样每次提交代码的时候,都是干净的代码,是不是很方便?
相关文章
- MapReduce with MongoDB and Python[ZT]
- 第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求
- python常用代码
- Centos 6.4 安装Python 2.7 python-pip
- 使用python调用shell命令示例代码
- python封装之property装饰器代码示例:将一个get方法,转换为对象的属性
- Python Django jsonpickle序列化隐藏部分字段代码示例
- Python自动化办公:27行代码实现将多个Excel表格内容批量汇总合并到一个表格
- Python兼职私活接单方法大曝光,这4种方法你知道吗?
- Python编程:利用python编程实现对基于时间序列的数据(dataframe格式)按照指定时间范围进行单方向关联,不存在的日期补充为默认的NaN
- Python编程语言学习:python语言中快速查询python自带模块&函数的用法及其属性方法、如何查询某个函数&关键词的用法、输出一个类或者实例化对象的所有属性和方法名之详细攻略
- Python编程语言学习:一行代码利用enumerate函数把纯列表数据转为自带索引的字典数据,字典格式数据应用之key和value相互提取
- Python编程语言学习:仅需一行代码将字符串化的数字数组、int数组、float数组实现之间互换(将一个字符串数组转换成整型数组)
- Python语言学习:python语言代码调试—异常处理之详细攻略
- Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Button展示图片事件)
- Python语言学习之数值、小数、空格那些事:python和数值、小数、空格的使用方法之详细攻略
- Python:利用python代码编程实现将视频的avi格式转换为MP4格式
- 【python代码】:能在手机上敲 Python 代码几款App
- python四十几行代码实现界面化贪吃蛇
- 5种非常棒的 Python 技巧,使你的代码更优雅
- python查看程序运行时间
- python之async-timeout模块
- 【华为OD机试 2023】优雅子数组(C++ Java JavaScript Python)
- Python解释器的探讨:第二部分代码对象
- python web py入门(57)- jQuery - 多个JS代码的文件
- 调用另一个文件的python代码【转载】
- 八大排序算法的python实现
- 炸弹人小游戏代码开源(python)
- 20个非常有用的Python单行代码
- 【python】Python实现网络爬虫demo实例
- Windows10/Anaconda下安装python cesium包的问题及解决
- 学习C++:C++进阶(六)如何在C++代码中调用python类,实例化python中类的对象,如何将conda中的深度学习环境导入C++项目中