使用isort和autopep8统一代码风格

前言

今天和大家分享一篇关于python代码风格统一的方法。我自己之前有使用过,但都是使用公司现成的,没有自己动手去实操,所以为了一探究竟,今天专门花了一点时间去研究,这个过程还挺顺利的,这里我将这个过程分享给大家。

我这里主要分享python中的导包规范和内容规范统一的方法,分别使用到的两个工具是isort和autopep8,当然这样的工具有很多,至于为什么选择这两个工具:第一导包工具的格式化我只查到了isort这一个,第二autopep8是根据pep 8这个提议开发的,相对较官方。同时我也会分享如何在git中如何使用这两个工具,让你每次都能提交规范统一的代码,这里主要会用到pre- commit这个工具。

isort

isort的官方介绍:isort is a Python utility / library to sort imports alphabetically, and automatically separated into sections and by type. It provides a command line utility, Python library and plugins for various editors to quickly sort all your imports. It requires Python 3.7+ to run but supports formatting Python 2 code too.

通过官方介绍我们可以知道对我们有用的几点:

  • 1.它是按照字母顺序进行排序的,同时也会根据导入的类型(内置库,第三方库,自己的库)来进行分类排序
  • 2支持命令行(也能内嵌代码)
  • 3.python版本要求3.7+,python2的仅支持格式化(isort既支持导包格式化也支持内容格式化)

排序的规则

根据包的来源不同,我们可以分为内置库,第三方包和自己编写的库,按照导包的风格,我们可以分为from xxx import xxximport xxx两种风格。因此排序规则为:首先按照包的来源,然后按照导入风格,最后根据报名来进行排序,排序后的代码样子长成下面这个样子:

from __future__ import absolute_import

import os
import sys

from third_party import (lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8,
lib9, lib10, lib11, lib12, lib13, lib14, lib15)

from my_lib import Object, Object2, Object3

print("Hey")
print("yo")

使用

安装
pip install isort
命令行使用

官方的例子很好,我这里就直接贴出官方的例子来:

image.9814d010bced11ee9de617490ed73bd0.png

autopep8

上面使用isort进行了导包的规范,现在来使用autopep8来进行代码内容的规范。
它好像没有官网,但是有官方的github仓库:传送门。

官方介绍:autopep8 automatically formats Python code to conform to the PEP 8 style guide. It uses the pycodestyle utility to determine what parts of the code needs to be formatted. autopep8 is capable of fixing most of the formatting issues that can be reported by pycodestyle.
通过官方文档的介绍我们可以知道信息是:autoepep8主要实现了将代码格式转成pep8的格式。它借助了pycodestyle来检查哪些需要转化,然后它自己再去执行这些转化。具体的pep8规范大家可以参考上面的链接。

使用

安装
pip install autopep8
命令行使用

它的使用也和isort一样方便:

autopep8 filename

它的配置项有如下这些:
image.a3792c0ebcf111ee9de617490ed73bd0.png
其中有一个需要提到的配置就是这个–max-line-length n,它是用来限制每一行代码的最大长度的,默认是79个字符的长度,也就是超过了79个字符就不满足它的要求,会进行格式化。但是实际上我个人觉得79有点太短了,格式化之后反而会看着不舒服,不知道大家会不会有这个感觉。

git提交时自动格式化

isort和autopep8都支持命令行和代码内(很少这样使用)实现,上面主要分享了命令行内的使用方法,但是它也支持在git commit时自动格式化,这样就不需要我们每次写完代码再命令行输入命令进行格式化了。这里需要使用到另外一个工具,它就是:pre-commit,官方文档介绍如下:
image.3f38e060bcf411ee9de617490ed73bd0.png
其中红框是我认为比较重要的点:

  • 1.它会在每次commit的时候运行一些hooks(这里的hooks可以理解成上面的小工具)
  • 2.它的目的是让我们专注在内容上,而不是样式(提升效率)

使用

安装
pip install pre-commit
配置

配置的步骤主要有两点:

  1. 1.在项目的根目录下新建一个yaml文件,文件名为:.pre-commit-config.yaml
  2. 2.配置内容,格式如下所示。如果复制粘贴嫌太麻烦的话可以使用pre-commit sample-config > .pre-commit-config.yaml命令,它会生成一个样本配置到指定的文件。

image.e80bc272bd9711ee9de617490ed73bd0.png

知道了如上的配置规则后,配置isort和autopep8就容易很多了!一般官网也会给出相应的配置,isort的配置如下(参考链接):
(这里有一点需要注意的是:官方链接给出的样例中版本指定的是5.11.2,但是这个可能会有问题,指定更高的版本就可以了。)

-   repo: https://github.com/pycqa/isort
    rev: 5.12.0
    hooks:
      - id: isort
        name: isort (python)

autopep8的配置与isort类似,如下:

- repo: https://github.com/hhatto/autopep8
  rev: 2.0.4  # select the tag or revision you want, or run `pre-commit autoupdate`
  hooks:
  - id: autopep8

需要注意的是,通过pre-commit来运行这两个hook时,既可以在.pre-commit-config.yaml文件中指定参数,也可以在各自的配置文件中指定参数,各自的配置可以参考官方网站,我这里分享一下autopep8的配置,autopep8在运行时会默认读取全局配置,同时也会读取local的配置(如果local指定了的话)
image.fc2a10d0bd9f11ee9de617490ed73bd0.png
我这里在local指定一下配置文件:
image.031f4ca0bda211ee9de617490ed73bd0.png

通过这样指定后,你在命令行运行autopep8时就不需要再额外指定配置了,它会默认读取这个配置文件。配置完成之后,我最后的.pre-commit-config.yaml文件是下面这个样:

# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.5.0
    hooks:
    - id: trailing-whitespace
    - id: end-of-file-fixer
    - id: check-yaml
    - id: check-added-large-files
# isort的配置
-   repo: https://github.com/pycqa/isort
    rev: 5.13.2
    hooks:
      - id: isort
        name: isort (python)
# autopep8的配置
-   repo: https://github.com/hhatto/autopep8
    rev: v2.0.4  # select the tag or revision you want, or run `pre-commit autoupdate`
    hooks:
    - id: autopep8
      args: ["."]
安装git hook scripts

上面的配置算是完成了所有的准备工作,但是如何在commit时自动运行这两个hook,还需要最后一个步骤,那就是安装git hook scripts,这个步骤也非常简单,需要执行的命令如下:

pre-commit install

执行完这个命令后,你每次git commit时就会执行上面的两个hook啦!如果在commit时发现你的代码不符合规范,它会自动给你修改,这个时候你需要重新add并commit才能提交到远程仓库。

总结

这篇文章主要围绕代码规范统一,介绍了两个工具的使用方式,分别是isort和autopep8,他们都是针对python代码风格统一的工具,其中isort能够规范导包的风格,autopep8能够规范代码内容的风格,他们各自都支持命令行和内嵌代码来执行,最后介绍到了pre-commit这个工具,它能够将前面两个小工具“挂载”到git上,使得每次执行git commit命令的时候都自动去执行格式化。还等什么,快去规范一下你的代码风格吧!👻

更多内容可以关注博主的个人博客系统:《Python源码剖析》之对象的基石—PyObject

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是IIoT?

什么是IIoT? IIoT,即工业物联网(Industrial Internet of Things),是指将物联网技术应用到工业领域,通过微型低成本传感器、高带宽无线网络等技术手段,实现工业设备、系统和服务的互联互通,从而提高生产效率、降低能耗和成本,实现智能化和自动化生产。 IIoT的应用范围…

Vitis HLS 学习笔记--BLAS库之WideType

目录 1. WideType 数据类型 2. WideType 类模板参数 2.1 SFINAE技术 3. WideType 类中的函数 3.1 operator[](unsigned int p_Idx) 3.2 operator(const WideType& p_w) const 3.3 getValAddr() 3.4 operator const t_TypeInt() 4. 总结 1. WideType 数据类型 在 …

NtripShare2024年第一季度主要技术进展

迷迷糊糊又是一个月没有写点什么,近期想清楚NtripShare在2024的要做什么事情,暂且将NtripShare要做的主要事情为搭建由软件与硬件之间的技术桥梁。 在过去的几年时间里NtripShare对硬件方面一直是规避的态度,今年开始要做一点软硬件搭界的技…

网络编程初步

协议: 一组规则 分层模型结构: OSI七层模型:物、数、网、传、会、表、应 TCP/IP 4层模型:网(链路层/网络接口层)、网、传、应 应用层:http、 ftp、 nfs、 ssh、 telneto o .传输层:TCP、UDP 网络层&…

SpringBoot基于JavaWeb的菜鸟驿站快递管理系统ssm

前端:vue.jsElementUI 编程语言: java 框架: ssm/springboot 详细技术:springboot springbootvueMYSQLMAVEN 数据库: mysql5.7 数据库工具:Navicat/SQLyog都可以 ide工具:IDEA 或者eclipse 对菜鸟驿站快递管理系统设计…

判别饮用水可饮用的多机器学习模型

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 项目背景 饮用水是人类生存的基本需求之一,也是维护健康和有效保护健康政策的重要组成部分。因此,确保饮用水质量对于国…

3分钟看懂Microchip 32位MCU CAN模块的配置

文章目录 CAN模块系统框图Microchip MCC Harmony下CAN模块配置选项CAN模块工作模式CAN模块中断模式CAN工作速率Bit Timing Calculation配置CAN 接收的配置CAN 发送的配置CAN 过滤器工作流程说明CAN 过滤器的配置 CAN模块系统框图 CAN的英文全称:Control Area Networ…

通过linux工具iftop命令查看视频监控平台是否收到监控摄像头的视频流(视频监控平台接收和转发的视频流)

目录 一、需求描述 二、解决思路 (一)问题分析 (二)解决思路 1、通过抓包的方式 2、通过一些linux的网络监视工具 三、需求实现 (一)抓包工具 1、tcpdump 2、Wireshark 3、tcptrace &#xff0…

OpenHarmony 网络与连接—RPC连接

介绍 本示例使用ohos.rpc 相关接口,实现了一个前台选择商品和数目,后台计算总价的功能,使用rpc进行前台和后台的通信。 效果预览 使用说明: 点击商品种类的空白方框,弹出商品选择列表,选择点击对应的商品…

天软因子数据系列课堂回顾——“委托订单:流动性因子”

高频因子库4月更新,新增5张表单,51个因子。目前,高频因子数量扩容到628个,涵盖了从2000年开始的全A市场。本次“天软因子数据系列课堂”在线分享的即是最新发布因子列表之一的流动性因子,剖析微观角度下因子的底层逻辑…

什么是代理IP?如何正确使用代理IP?

代理IP(Proxy IP)是一种网络技术,它允许用户通过一个中介服务器(即代理服务器)来访问互联网。具体来说,代理IP隐藏了用户的真实IP地址,使用第三方的IP地址进行网络访问。当用户发起网络请求时&a…

Linux进阶篇:Centos7搭建smb服务

Centos7搭建smb服务 1 smb介绍 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域…

数据结构-基于ArrayList的源码模拟

文章目录 继承关系 :1. 构造方法的模拟2. 扩容机制的分析3. 查找方法的模拟4. 获取,修改元素的方法模拟5. 添加元素的模拟6. 删除元素的模拟7. removeAll与retainAll的模拟总结: 边缘方法以及总代码 继承关系 : 1. 构造方法的模拟 源码中我们的ArrayList的构造方法给出了三种实…

基于SpringBoot+Vue的便利店管理系统 免费获取源码

项目源码获取方式放在文章末尾处 项目技术 数据库:Mysql5.7/8.0 数据表:11张 开发语言:Java(jdk1.8) 开发工具:idea 前端技术:vue 后端技术:SpringBoot 功能简介 (有文档) 项目获取关键字&#…

tcp-learner 数据包分析 20240420

输入输出: 数据包分析: learner和Adapter建立连接。 Learner让Adapter发送RST Adapter没有从SUT抓到任何回复,于是向learner发送timeout learner给adapter发送reset命令,让SUT重置。 这是第一次初始化,由于Adapter和…

7. DAX 时间函数-- DATE 日期--TOTALMTD、TOTALQTD、TOTALYTD

函数名目的语法返回值TOTALMTD计算当前上下文中该月份至今的表达式的值 。TOTALMTD ( <表达式>, <日期列>, [<筛选器>] )标量 表示表达式的标量值&#xff0c;在“日期”中给定日期&#xff0c;计算当前月份至今的日期 。TOTALQTD计算当前上下文中该季度至今…

452. 用最少数量的箭引爆气球[排序+贪心]

https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-balloons/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#xff0c;其中points[i] [xst…

C++ 内存分区管理

一、栈区&#xff08;Stack&#xff09; 栈区用来存储函数的参数值、局部变量的值等数据。栈区是自动分配和释放的&#xff0c;函数执行时会在栈区分配空间&#xff0c;函数执行结束时会自动释放这些空间。栈区的数据是连续分配的&#xff0c;由系统自动管理。 注意事项&…

大话设计模式-依赖倒转原则

依赖倒转原则 在大话设计模式这本书中&#xff0c;作者通过电话修电脑这个例子引入了面向对象设计的基本原则之一&#xff1a;依赖倒转原则。 概念 依赖倒转原则是面向对象设计的基本原则之一&#xff0c;它用于减少类之间的耦合&#xff0c;提高系统的灵活性和可维护性。在…

明道云HAP合作伙伴计划全解析:开辟业务增长新路径

什么是明道云HAP合作伙伴计划&#xff1f; 明道云采纳的是增值伙伴商业模式。在这个模式下&#xff0c;合作伙伴通过平台型产品为终端客户提供定制应用、行业解决方案、赋能培训等增值活动&#xff0c;从而在大幅降低交付成本的同时获得多来源的收入&#xff0c;提高经营绩效水…