Python PEP 8编码规范详解:从缩进到注释的最佳实践

方予
方予
发布时间:2026-10-12 | 2人浏览过
原创

本文系统梳理Python PEP 8编码规范,涵盖缩进、行长度、空行、命名、字符串及注释等核心规则。详细解析4空格缩进、79字符行限制、变量命名禁忌及文档字符串写法,帮助开发者编写清晰、一致且符合社区标准的Python代码。

一、PEP 8规范

官方文档地址:https://legacy.python.org/dev/peps/pep-0008/ 中文翻译版本:https://www.jb51.net/article/103944.htm

二、缩进

每一级缩进应使用4个空格。

续行应与包裹元素对齐,可通过圆括号、方括号或花括号内的隐式行连接实现垂直对齐,也可采用挂行缩进方式。使用挂行缩进时,首行不应包含参数,且需通过缩进明确区分其为续行内容。

  • 对齐缩进(左右括号对齐)
def long_function_name(var_one, var_two,
                       var_three, var_four):
    print(var_one)
  • 悬挂缩进
def long_function_name(
       var_one, var_two,
       var_three, var_four):
   print(var_one)
  • 层级缩进
def long_function_name(
      var_one, var_two, var_three,
      var_four):
  print(var_one, var_two, var_three, var_four)

三、行的最大长度

所有代码行的最大字符数限制为79个字符。

对于无结构化限制的大块文本(如文档字符串或注释),每行最大字符数限制为72个。

with open("file1", "r") as f1, \
        open("file2", "r") as f2:
    f2.write(f1.read())

四、空行

顶层函数和类的定义前后应各保留两个空行。

类内部的方法定义之间应保留一个空行。

class Class01:
    pass


class Class02:
    def function_01(self):
        pass

    def function_02(self):
        pass

五、命名约定

变量命名

  • 严禁使用字母I(小写L)、O(大写O)或I(大写i)作为单字符变量名。
  • 在某些字体中,这些字符难以与数字0和1区分。若必须使用类似形状,建议使用L代替I。

函数命名

  • 函数名应全部小写,若需提高可读性,可使用下划线分隔单词。
  • 大小写混合命名仅在为了兼容原有主要采用该风格的项目时才使用,以保持向后兼容。

类命名

  • 类名通常采用首字母大写的约定。
  • 若接口已文档化且主要用于调用场景,可使用函数命名风格替代。
  • 注意:内置变量有单独约定:大部分内置变量为单个单词(或两个单词直接连接),首字母大写命名法仅用于异常名或内部常量。

类里面函数和方法参数

  • 实例方法的第一个参数必须始终为self。
  • 类方法的第一个参数必须始终为cls。
  • 若函数参数名与已有关键字冲突,在末尾添加下划线比使用缩写或随意拼写更佳。例如,class_优于clss。

六、字符串引号

单引号和双引号字符串在功能上相同。PEP未对此给出具体建议,选择一种规则并坚持使用即可。当字符串内部包含单引号或双引号时,使用与外层不同的引号符号可避免使用反斜杠,从而提高可读性。

模块和包导入规范

  • 命名规范:模块名称应简短、小写,并避免使用特殊符号(如点和问号)。
  • 因此,请尽量保持模块名简单,无需刻意分词(不推荐在两个单词之间使用下划线)。

模块导入建议

示例 结果
from modu import * 差, 不清楚具体从模块中导入了哪些内容
from modu import sqrt 稍好
import modu 最佳 , 调用的时候直接使用modu.sqrt能比较清楚的知道当前方法属于哪个模块。
import os \n import sys 推荐
import os, sys 不推荐
from subprocess import Popen, PIPE 也可以

__all__变量

  • 若模块中存在全局变量__all__,则通过__all__ from xxx import *导入时,仅会导入__all__中指定的方法和变量;若未定义,则默认导入全部内容。

七、包

  • 任何包含__init__.py文件的目录均被视为Python包。
  • 因为导入包时会首先执行__init__.py文件。
  • 包中__init__.py文件中__all__变量的作用
  • 若init.py文件中存在全局变量__all__,通过from xxx import *导入时,仅会导入__all__中指定的方法和变量;若未定义,则默认导入全部内容。

八、注释

与代码相矛盾的注释比没有注释还糟,当代码更改时,优先更新对应的注释!
注释应该是完整的句子。如果一个注释是一个短语或者句子,它的第一个单词应该大写,除非它是以小写字母开头的标识符(永远不要改变标识符的大小写!)。
如果注释很短,结尾的句号可以省略。块注释一般由完整句子的一个或多个段落组成,并且每句话结束有个句号。
在句尾结束的时候应该使用两个空格。
在非英语国家的python程序员,请使用英文写注释,除非120%的确信你的代码不会被使用其他语言的人阅读。

块注释

块注释通常适用于其后的某些(或全部)代码,并缩进至与代码相同的级别。块注释的每一行开头使用一个#和一个空格(除非块注释内部包含缩进文本)。

块注释内部的段落通常由一个#的空行分隔。

行内注释

应有节制地使用行内注释。

行内注释是与代码语句同行的注释。行内注释和代码之间至少要有两个空格分隔。注释由#和一个空格开始。

文档注释

必须为所有公共模块、函数、类和方法编写文档说明。

非公共方法虽非必需,但应包含描述其具体作用的注释。该注释应位于def那一行之后。

PEP257描述了写出好的文档注释的相关约定。特别需要注意的是:多行文档注释使用的结尾三引号应自成一行,例如:

"""这是注释
注释的具体内筒
"""
 对于单行的文档说明,尾部的三引号应该和文档在同一行。

到此这篇关于python基础之编码规范总结的文章就介绍到这了,更多相关python编码规范内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表