python开发中如何实现自检代码并形成代码规范

背景

在实际开发过程中,每次我们的代码发生改变后,使用命令或者通过运行IDE中的某个插件的方式来检查代码是比较麻烦的,另外,和你进行合作开发的其他人也有可能用了和你不同的代码检查方式,甚至我们自己有时候也可能没有严格的进行代码检查或者就算有了提示但是你并没有根据提示要求去更正你的代码,导致代码慢慢的变得混乱并且难以理解和阅读,可维护成本变高,一般要想提高项目的可维护性可以使用一些外部库来检查代码的运行状况。

实现

为了能够使开发人员能够快速的了解新项目的具体情况快速上手,并且可以保持项目代码进行良好运行,一个比较好的方式就是在代码提交前强制进行自动化代码规范,下面开始介绍实现代码规范的各个模块和工具的使用。

Typing

变量类型提示模块

作用:

1.用于进行代码检查,防止代码运行时出现

1)函数参数的传入和调用不匹配的问题

2)函数返回值类型不符合预期的问题

2.可以作为开发文档的附加说明

1)方便使用者调用已经存在的函数时准确的了解传入和返回参数的类型,增强代码的可维护性

2)当定义比较复杂的变量时,使用变量类型提示,能够增强代码的可读性

3.加入该模块后不会影响代码的正常运行,也不会报正式的错误,只是起到提醒的作用。

注:typing是python3.5之后才有的模块,目前pycharm是支持其进行代码检查的。

python3.9之后:Python 3.9 有哪些新变化?

Mypy

静态类型检查器,完成带有类型提示的代码之后,用 mypy 命令来检查,会检查出有错误的代码,让类型提示的作用发挥的更加有效。

在没有mypy之前,typing模块只能让代码看起来更加美观,就算参数真的传错了,也并不会影响程序的运行,没有真正起到提示的作用。

安装:

pip3 install mypy

使用:

mypy demo.py

如果想忽略错误提示:

func() # type: ignore

注:mypy也是需要python3.5之后的版本才能运行,虽然需要安装python3才能执行,但是它也能检查python2的代码。

Flake8

检查 Python 代码风格和质量的一个 Python 工具,它将 PEP 8、Pyflakes(类似 Pylint)、McCabe(代码复杂性检查器)和第三方插件整合到一起。

安装:

pip3 install flake8

使用:

flake8 demo.py

注:flake8也是需要python3.5之后的版本才能运行。

Black

python代码格式化工具

python代码需要遵循PEP8规范,是python开发的标配,如果不遵循就会出现黄色波浪线提示。

black是python官方的用来检查代码是否符合PEP8规范的工具,可以格式化整个文件。

安装:

pip3 install black

使用:

black demo.py

注意:black需要python3.6.2之后的版本才能运行

Isort

使import 列表更美观的工具包,它会按照字母顺序对导入的的库进行排序,支持命令行和python代码内部导入两种方式进行导入库的整理。

安装:

pip3 install isort

使用:

isort demo.py

忽略单个import库:

import 模块名 # isort:skip

忽略整个文件:


""" 
demo.py
isort:skip_file
"""

注意:isort需要python3.6之后的版本才能运行

pre-commit

git预提交钩子

介绍:用于管理和维护多语言预提交的框架,用于代码git提交commit之前的审查,自动指出代码中存在的问题,如果代码检测出错,则阻止commit代码的提交,从而也没办法push,保证有问题的代码不会被提交到远程仓库中。通过在代码提交前发现问题,这会让我们更专注于代码更改的架构,而不用浪费时间在代码风格的选择。

安装:

pip3 install pre-commit

在项目的根目录下添加预提交配置文件.pre-commit-config.yaml

将自动检查代码纳入到开发工作流程中

black,flake8,mypy,isort等和pre-commit集成使用

编辑.pre-commit-config.yaml

repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
  rev: v4.1.0
  hooks:
    - id: check-yaml
    - id: trailing-whitespace
    - id: end-of-file-fixer
    - id: check-docstring-first
    - id: debug-statements
    - id: requirements-txt-fixer
- repo: https://gitlab.com/pycqa/flake8
  rev: 4.0.1
  hooks:
    - id: flake8
      additional_dependencies:
        - flake8-pytest-style
        - flake8-bugbear
        - flake8-logging-format
- repo: https://github.com/psf/black
  rev: 22.3.0
  hooks:
    - id: black
- repo: https://github.com/pycqa/isort
  rev: 5.10.1
  hooks:
    - id: isort
- repo: https://github.com/asottile/setup-cfg-fmt
  rev: v1.20.0
  hooks:
    - id: setup-cfg-fmt
- repo: https://github.com/pre-commit/mirrors-mypy
  rev: v0.950
  hooks:
    - id: mypy
      additional_dependencies:
        - types-all
        - sqlalchemy-stubs

使用:

 手动运行存储库上的所有预提交挂钩

pre-commit run --all-files

预提交支持多种语言编写的钩子,只要使用的repo(任何可以git clone都可以repo)是可安装的包(gem,npm pypi等)或者公开的可执行文件就可以和pre-commit一起进行使用,预提交配置文件会告诉pre-commit。

参考文档:

​​​​​​typing — Support for type hints — Python 3.10.4 documentation

PEP 585 – Type Hinting Generics In Standard Collections | peps.python.org

mypy 0.950 documentation

pre-commit

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值