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

Python编码格式化之PEP8编码规范

文章目录

  • 概要
  • PEP8编码风格
    • py文本组织规范
    • 命名规范
    • 编码风格
  • PEP8编码检查工具
    • pylint
    • flake8
    • PyCharm中配置检查工具
  • PEP8编码格式化工具
    • black
    • autopep8
    • PyCharm配置格式化工具
    • 本地git配置hook
  • 总结

概要

在Python项目开发过程中,代码的可读性和一致性对于项目的长期维护和团队协作至关重要。为了实现这一目标,PEP8(Python Enhancement Proposal 8)作为官方推荐的编码风格指南,为Python开发者提供了一套标准的编码规范。本文围绕PEP8的核心内容、主流的格式检查工具、格式化工具以及如何将其集成到开发流程中进行介绍。

PEP8编码风格

PEP8 是Python社区广泛接受的编码风格指南,旨在提高代码的一致性和可读性。其主要内容包括:

py文本组织规范

  • 缩进:使用4个空格进行缩进,避免使用Tab;
  • 行长与换行: 每行不应超过79个字符(注释和文档字符串建议不超过72字符),如果过长需要断行,一般要求括号配对垂直对齐。

命名规范

  • 变量名/属性名、函数名/方法名使用小写字母加下划线(如 my_variable,my_func);
  • 类名使用驼峰命名法(如 MyClass);
  • 常量名通常全大写加下划线(如 MAX_VALUE)。

编码风格

  • 空格与操作符:在二元运算符两侧添加空格(如 a = b + c),但不要在括号内添加多余空格;
  • import语句:每个导入语句应单独一行,按标准库、第三方库、本地库顺序排列;
  • 注释与文档字符串:注释应完整句子并以句点结尾;文档字符串使用三引号包裹。

当然上面这些只是 PEP8编码规范中很少一部分,在实际开发过程中不可能单纯靠人记忆并修改规范。于是各种基于PEP8规范的检查工具/格式化工具应运而生。这里先解释一下检查工具与格式化工具的区别:

  1. 检查工具:指的是基于配置文件或默认的PEP8编码规范检查py脚本,如果存在问题,会by文件告警出不规范的表述,然后提醒开发者修改py脚本;
  2. 格式化工具:指的是相对于检查工具,它不但检查py脚本是否规范,如果不规范它还会基于规范配置文件直接帮助开发者格式化代码;

下面介绍几个Python开发中主流的检查工具和格式化工具,除了其强大的检查能力的介绍之外,还会简单介绍一下如何在Python开发的IDE环境中的配置方法,给有需要的同学一个配置参考。

PEP8编码检查工具

pylint

pylint 是一个功能强大的静态代码分析工具,不仅支持PEP8风格检查,还能检测潜在错误、代码复杂度等。
安装方式: pip install pylint
基本使用方法: pylint my_module.py
pylint支持通过配置文件自定义格式化检查的规范,配置文件名称为:.pylintrc,可以设置一些希望忽略的警告、设置一些规范参数例如最大行宽等,如果想要在CI/CD流中使用pylint做检查,可以写为:pylint --rcfile=/path/to/.pylintrc *.py,注意:

  1. 配置文件可以放置于代码仓中一起提交管理,路径做相应的适配;
  2. 对于某些特别大的Python项目,如果写为 *.py的方式检查可能会比较低效率,可以基于patch提炼出Modify和Add的py文件,然后只检查增量的py文件即可。

flake8

相对于pylint,flake8更轻量一些,其检查效率高、配置简单,且支持通过插件的方式灵活扩展;但不支持静态类型检查。
安装方式: pip install flake8
基本使用方法: flake8 my_module.py
flake8支持自定义配置文件,一般命名为setup.cfg或 .flake8,配置文件中具体支持哪些参数自定义,也可以参考官网。
在CI/CD流中使用flake8做检查,可以写为:flake8 --config=/path/to/.flake8 *.py

PyCharm中配置检查工具

PyCharm是python开发的主流IDE之一,在这款IDE中支持将检查的命令封装为一个tool命令或快捷键,这样在提交代码前就可以很方便的对修改的py脚本检查一遍格式。
以flake8为例,首先创建一个Python虚拟环境,然后安装flake8,并创建一个配置文件,编写一段示例Python代码,如下:
示例Python代码:

# 这是一个示例 Python 脚本。# 按 Shift+F10 执行或将其替换为您的代码。
# 按 双击 Shift 在所有地方搜索类、文件、工具窗口、操作和设置。
import osdef print_hi(name):# 在下面的代码行中使用断点来调试脚本。print(f'Hi, {name}')  # 按 Ctrl+F8 切换断点。# 按装订区域中的绿色按钮以运行脚本。
if __name__ == '__main__':print_hi('PyCharm')print("The length of this line is to long long long long long long long long long long long long long ")

示例配置文件:

[flake8]
# 最大行长度
max-line-length = 88# 忽略的错误码(根据团队风格定制)
ignore = E203, E266, W503# 检查的最大复杂度(McCabe 指标)
max-complexity = 10# 排除检查的目录或文件
exclude =.git,__pycache__,env,venv,migrations,*.pyc# 显示错误信息的格式(可选)
format = %(path)s:%(row)d: %(code)s %(text)s

Pycharm中的配置方法如下:
在Pycharm中配置外部工具
设置 --> 工具 --> 外部工具,点击新建工具,填充内容为:

  • 名称/描述:自定义
  • 程序:使用虚拟环境下安装的flake8模块 :$ProjectFileDir$\py_demo\venv\Scripts\flake8.exe
  • 实参: --config $ProjectFileDir$\py_format\.flake8 $FilePath$
  • 工作目录:保持默认即可。
    其中,$ProjectFileDir$表示的是项目所在的根目录,$FilePath$表示当前文件,这两个是PyCharm文件路径宏,多用于配置外部工具、运行脚本、调试其参数、Git hooks等。诸如此类的宏变量还有:
    Pycharm中的宏变量
    配置完毕后,外部工具的使用方法和检查效果如下:
    格式化检查效果

PEP8编码格式化工具

代码格式化工具不仅能帮我们检查出不规范的code,还能自动帮助开发者修复,这里也推荐两种:black和autopep8.

black

black是一个无配置的代码格式化工具,其风格较为严格,强制统一了Python项目的编码风格。
安装方式: pip install black
基本使用方法: black my_module.py

autopep8

autopep8根据PEP8规范自动修复代码中的格式问题,此工具支持通过命令行传参的方式控制格式化行为。
安装方式: pip install autopep8
基本使用方法: autopep8 --in-place --aggressive my_module.py,会严格按照PEP8规范直接修改py文件;
如果只是想检查而不直接修改,可以: autopep8 --diff my_module.py

PyCharm配置格式化工具

以autopep8为例,仍然使用上述的示例Python代码,把安装的autopep8配置为一个外部工具:

  • 程序:使用虚拟环境下安装的autopep8模块 :$ProjectFileDir$\venv\Scripts\autopep8.exe
  • 实参: --in-place --aggressive $FilePath$

运行效果:
autopep8运行效果

本地git配置hook

在git管理的项目中,可以通过配置pre-commit钩子实现每次git commit提交代码时自动格式化Python脚本,配置方法如下:
安装方式: pip install pre-commit
在项目的根目录创建 .pre-commit-config.yaml文件,注意entry字段的路径替换为你本地的路径:

repos:- repo: localhooks:- id: autopep8name: autopep8entry: /path/to/your/projects/python/py_demo/venv/Scripts/autopep8.exelanguage: systemargs: [--aggressive, --in-place]types: [python]

在项目的根目录运行 pre-commit install,然后测试提交,仍然使用上述autopep8中的Python示例代码,执行git add main.py && git commit -m '测试格式化py脚本'后,效果如下:
git提交Patch格式化代码

总结

在Python项目的开发中,一般在CI/CD流中配置检查工具,尤其是团队开发场景,在Patch合入前加一道拦截,可以有效保证代码仓库风格的一致性;一般在本地的IDE中配置格式化工具,自测完毕后、提交Patch前运行格式化工具,可以很方便地帮助开发者统一编码风格,当然也可以在Git Hook的pre-commit中配置钩子,在git commit前就自动把代码格式化好,省略额外的步骤,以提高开发效率。

相关文章:

Python编码格式化之PEP8编码规范

文章目录 概要PEP8编码风格py文本组织规范命名规范编码风格 PEP8编码检查工具pylintflake8PyCharm中配置检查工具 PEP8编码格式化工具blackautopep8PyCharm配置格式化工具本地git配置hook 总结 概要 在Python项目开发过程中,代码的可读性和一致性对于项目的长期维护…...

【Zephyr 系列 14】使用 MCUboot 实现 BLE OTA 升级机制:构建安全可靠的固件分发系统

🧠关键词:Zephyr、MCUboot、OTA 升级、BLE DFU、双分区、Bootloader、安全固件管理 📌面向读者:希望基于 Zephyr 为 BLE 设备加入安全 OTA 升级功能的开发者 📊预计字数:5200+ 字 🧭 前言:为什么你需要 OTA? 随着设备部署数量增多与产品生命周期延长,远程升级(…...

K8S认证|CKS题库+答案| 8. 沙箱运行容器 gVisor

目录 8. 沙箱运行容器 gVisor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、官网找模板 3)、创建 RuntimeClass 4)、 将命名空间为 server 下的 Pod 引用 RuntimeClass 5&#xff09…...

【Redis】数据库与缓存一致性

目录 1、背景2、核心问题3、常见解决方案【1】缓存更新策略[1]旁路缓存模式(Cache-Aside)[2]写穿透模式(Write-Through)[3]写回模式 【2】删除与更新策略[1]先更新数据库再删除缓存[2]先删除缓存再更新数据库 【3】一致性保障机制…...

Selenium4+Python的web自动化测试框架

一、什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE:Firefo…...

【论文解读】MemGPT: 迈向为操作系统的LLM

1st author: Charles Packer paper MemGPT[2310.08560] MemGPT: Towards LLMs as Operating Systems code: letta-ai/letta: Letta (formerly MemGPT) is the stateful agents framework with memory, reasoning, and context management. 这个项目现在已经转化为 Letta &a…...

vb监测Excel两个单元格变化,达到阈值响铃

需求 在Excel中实现监控两个单元格之间的变化范围,当达到某个设定的值的范围内时,实现自动响铃提示。 实现: 首先设置Excel,开启宏、打开开发者工具,点击visual Basic按钮,然后在左侧双击需要监测的shee…...

跨域请求解决方案全解析

跨域请求可以通过多种技术方案实现,核心是绕过浏览器的同源策略限制。以下是主流解决方案及具体实现方式: 一、CORS(跨域资源共享) 最常用的标准化方案,通过服务器设置HTTP响应头实现: Access-Control-Al…...

【前端】vue3性能优化方案

以下是Vue 3性能优化的系统性方案,结合核心优化策略与实用技巧,覆盖渲染、响应式、加载、代码等多个维度: ⚙️ 一、渲染优化 精准控制渲染范围 v-if vs v-show: v-if:条件为假时销毁DOM,适合低频切换场景&…...

node 进程管理工具 pm2 的详细说明 —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录 7

前言 我以 Ubuntu Server 打造的 NodeJS 服务器为主题的系列文章,经过五篇博客,我们顺利的 安装了 ubuntu server 服务器,并且配置好了 ssh 免密登录服务器,安装好了 服务器常用软件安装, 配置好了 zsh 和 vim 以及 通过 NVM 安装…...

Flask与Celery 项目应用(shared_task使用)

目录 1. 项目概述主要功能技术栈 2. 项目结构3. 环境设置创建虚拟环境并安装依赖主要依赖 4. 应用配置Flask应用初始化 (__init__.py)Celery应用初始化 (make_celery.py) 5. 定义Celery任务 (tasks.py)任务说明 6. 创建API端点 (views.py)API端点说明 7. 前端界面 (index.html)…...

Fetch API 使用详解:Bearer Token 与 localStorage 实践

Fetch API:现代浏览器内置的用于发送 HTTP 请求的 API,Bearer Token:一种基于令牌的身份验证方案,常用于 JWT 认证,localStorage:浏览器提供的持久化存储方案,用于在客户端存储数据。 token是我…...

vue3 vite.config.js 引入bem.scss文件报错

[sass] Can’t find stylesheet to import. ╷ 1 │ use “/bem.scss” as *; │ ^^^^^^^^^^^^^^^^^^^^^^ ╵ src\App.vue 1:1 root stylesheet 分析 我们遇到了一个在Vue3项目中使用Vite时,在vite.config.js中引入bem.scss文件报错的问题。错误信息指出在App.vue…...

二叉树-226.翻转链表-力扣(LeetCode)

一、题目解析 翻转可以理解为树的左右子树交换,从根到叶子节点,但是这里交换的是链接的指针,而不是单纯的交换值,当出现nullptr时,也是可以交换链接的,交换值的话就不行了。 二、算法原理 依旧的递归&…...

HarmonyOS Next 弹窗系列教程(3)

HarmonyOS Next 弹窗系列教程(3) 选择器弹窗 (PickerDialog) 介绍 选择器弹窗通常用于在用户进行某些操作(如点击按钮)时显示特定的信息或选项。让用户可以进行选择提供的固定的内容。 以下内容都属于选择器弹窗: …...

编程笔记---问题小计

编程笔记 qml ProgressBar 为什么valuemodel.progress / 100 在QML中,ProgressBar的value属性用于表示进度条的当前进度值,其范围通常为0到1(或0%到100%)。当使用model.progress / 100来设置value时,这样做的原因是为…...

【docker】Windows安装docker

环境及工具(点击下载) Docker Desktop Installer.exe (windows 环境下运行docker的一款产品) wsl_update_x64 (Linux 内核包) 前期准备 系统要求2: Windows 11:64 位系统&am…...

无人机避障——感知部分(Ubuntu 20.04 复现Vins Fusion跑数据集)胎教级教程

硬件环境:NVIDIA Jeston Orin nx 系统:Ubuntu 20.04 任务:跑通 EuRoC MAV Dataset 数据集 展示结果: 编译Vins Fusion 创建工作空间vins_ws # 创建目录结构 mkdir -p ~/vins_ws/srccd ~/vins_ws/src# 初始化工作空间&#xf…...

人工智能--大型语言模型的存储

好的,我现在需要回答用户关于GGUF文件和safetensors文件后缀的差别的问题。首先,我得先确认这两个文件格式的具体应用场景和它们各自的优缺点。用户可能是在处理大模型时遇到了这两种文件格式,想了解它们的区别以便正确使用。 首先&#xff…...

OD 算法题 B卷【删除字符串中出现次数最少的字符】

文章目录 删除字符串中出现次数最少的字符 删除字符串中出现次数最少的字符 实现删除字符串中出现次数最少的字符,若(最少的)有多个字符出现次数一样,则都删除。输出删除后的字符串,其他字符保持原有顺序;…...

如何安装并使用RustDesk

参考: 搭建 RustDesk Server:打造属于自己的远程控制系统,替代 TeamViewer 和 ToDesk! 向日葵、ToDesk再见!自己动手,自建RustDesk远程服务器真香! 通俗易懂:RustDesk Server的搭…...

机器学习——随机森林算法

随机森林算法是一种强大的树集成算法,比使用单个决策树效果要好得多。 以下是生成树集成的方法:假设有一个大小为m的训练集,然后对于b1到B,所以执行B次,可以使用有放回抽样来创建一个大小为m的训练集。所以如果有10个…...

【从零学习JVM|第二篇】字节码文件

前言: 通过了解字节码文件可以帮助我们更容易的理解JVM的工作原理,所以接下来,我们来介绍一下字节码文件。 目录 前言: 正确的打开字节码文件 字节码文件组成 1. 魔数(Magic Number) 2. 版本号&…...

Fractal Generative Models论文阅读笔记与代码分析

何恺明分型模型这篇文章在二月底上传到arXiv预出版网站到现在已经过了三个月,当时我也听说这篇文章时感觉是大有可为,但是几个月不知道忙啥了,可能错过很多机会,但是亡羊补牢嘛,而且截至目前,该文章应该也还…...

软件测试—学习Day11

今天学习下兼容性 1.App兼容性常见问题 以下是关于 App 兼容性问题的常见举例,涵盖界面展示、操作逻辑、性能差异三大维度,涉及不同系统、设备及网络环境的兼容性场景: 一、界面展示问题 界面展示兼容性问题主要由操作系统版本差异、屏幕…...

OGG-01635 OGG-15149 centos服务器远程抽取AIX oracle11.2.0.4版本

背景描述 有一套ogg远程抽取的环境,源端是AIX7.1环境的oracle 11.2.0.4版本的数据库,中间是OGG抽取服务器,目标端是centos 7.9环境的oracle 19c。 采用集成模式远程抽取源端数据正常,但是经典模式远程抽取源数据的时候抽取进程启…...

Kotlin REPL初探

文章目录 1. Kotlin REPL 简介2. 在命令行中玩Kotlin REPL2.1 下载Kotlin编译器压缩包2.2 安装配置Kotlin编译器2.3 启动Kotlin交互式环境2.4 在命令行玩Kotlin REPL 3. 在IDEA里玩Kotlin REPL3.1 打开Kotlin REPL窗口3.2 在Kotlin REPL窗口玩代码 4. Kotlin REPL 的优势 1. Ko…...

git引用概念(git reference,git ref)(简化对复杂SHA-1哈希值的管理)(分支引用、标签引用、HEAD引用、远程引用、特殊引用)

文章目录 **引用的本质**1. **引用是文件**2. **引用的简化作用** **引用的类型**1. **分支引用(Branch References)**2. **标签引用(Tag References)**3. **HEAD 引用**4. **远程引用(Remote References)*…...

Github 2025-06-07 Rust开源项目日报Top10

根据Github Trendings的统计,今日(2025-06-07统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Dart项目1TypeScript项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust, Dart协议类型:GNU Affero Ge…...

gorm 配置数据库

介绍 GORM 是 Go 语言中最流行的 ORM(对象关系映射)库之一,基于数据库操作的封装,提供类似 Django ORM / SQLAlchemy 的开发体验。 特性描述支持多种数据库MySQL、PostgreSQL、SQLite、SQL Server、ClickHouse 等自动迁移自动根…...