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

news2025/6/9 22:59:58

文章目录

  • 概要
  • 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 os

def 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: local
    hooks:
      - id: autopep8
        name: autopep8
        entry: /path/to/your/projects/python/py_demo/venv/Scripts/autopep8.exe
        language: system
        args: [--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前就自动把代码格式化好,省略额外的步骤,以提高开发效率。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【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…

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…

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)…

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

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

HarmonyOS Next 弹窗系列教程(3)

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

【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…

如何安装并使用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预出版网站到现在已经过了三个月,当时我也听说这篇文章时感觉是大有可为,但是几个月不知道忙啥了,可能错过很多机会,但是亡羊补牢嘛,而且截至目前,该文章应该也还…

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…

自动化立体仓库堆垛机控制系统STEP7 OB1功能块

1、堆垛机控制系统STEP7硬件组态如下图 CPU CPU 314C-2 PN/DP 6ES7 314-6EH04-0AB0 SM 338 POS-INPUT AO2x12Bit 6ES7 332-5HB01-0AB0 2、堆垛机控制系统STEP7内部变量 前进HMI M 0.0 BOOL 后退HMI M 0.1 BOOL 上升HMI M 0.2 B…