Python编程规范(PEP8)

Python编程规范(PEP8)

代码布局

缩进

对于每一次缩进使用4个空格。使用括号、中括号、大括号进行垂直对齐,或者缩进对齐。

制表符还是空格?

永远不要将制表符与空格混合使用。Python最常用的缩进方式是只是用空格。

当调用Python命令行的 -t 选项时,它会检测并警告代码非法混合使用制表符和空格。当使用 -tt 选项时,警告变成了错误。

最大行长度

限制所有行最长为79个字符。

使用反斜杠来分行是一个很好的选择。

我们应当选择在二元操作符之后进行分行,而不是之前。

空行

使用两行空行来分隔顶层函数和类定义。

使用单行空行来分隔类方法定义。

在函数中使用空行来表示不同的逻辑块。

编码

Python核心发行代码里面优先使用ASCII码或Latin-1编码。3.0后UTF-8编码优先于Latin-1。

导入

每一个导入通常应当使用单独的行。

导入应当位于文件顶部,在模块注释和文档字符串之后,在全局变量和常量之前。

导入应当按以下顺序分组,且每组导入之间使用空行隔开:

1、标准库导入

2、第三方库导入

3、本地应用程序/定制库导入

使用绝对包路径导入。

表达式和语句中的空格

注释

误导的注释不如没有注释

注释应当为完整的句子,且句号结尾的句子后面应当有2个空格。如果注释很短,那么结尾的句号可以忽略。

块注释

块注释应当和代码缩进保持一致。每行注释开头应以#开头,然后紧跟一个空格。

行注释

行注释至少和语句间隔2个空格。同样的注释应当以#开头,然后紧跟一个空格。

文档字符串

对于所有的公有模块、类、函数和方法都需要编写文档字符串。

""" 作为多行的文档字符串的结束,应该单独一行,并且之前有一个空行。

对于只有一行的文档字符串来说,结尾的 """ 在同一行。

更详细的文档字符串规范见 PEP 257。

命名规范

目前Python库的命名规范尚未达成一致,但有一些推荐的标准。

在Python里面,有一些具有特定意义的下划线前缀或者后继的特殊格式。如:

1、_single_leading_underscore:(单下划线开始)弱"内部使用"指示器。例如:from M import * 不会导入以下划线开始的对象。

2、single_trailing_underscore_:(单下划线结束)规定使用其来避免与Python关键字冲突,例如:

Tkinter.Toplevel(master, class_=‘ClassName‘) 在参数class后面加单下划线,避免与关键字class冲突

3、__double_leading_underscore:(双下划线开始)命名一个类的属性时,调用"name mangling"(类FooBar中,__boo 变为了 _FooBar__boo; 见下文)

4、__double_leading_and_trailing_underscore__:(双下划线开始和结束)存活在用户控制命名空间的"magic"对象或属性。 例如__init__, __import__ 或 __file__。永远不要起这样的名字。

避免使用的命名

不要使用小写的L、大写的O、以及大写的I作为单字符变量名。

包与模块名称

模块应当使用简短、全小写的名字,也可使用下划线连接来提高可读性。

包也应当使用简短、全小写的名字,但不要使用下划线。

这是由于模块名与文件名关联,而在某些文件系统中大小写不敏感,且会截断过长的名字。

当使用C/C++来编写一个扩展模块时,应当使用下划线作为模块名的前缀。

类名

类名应当使用驼峰式(CapWords)。内部使用的类名应当加下划线前缀。

异常名

异常也是一个类,所以需要遵循类名规则。但如果你的异常确实是个错误的话,请使用Error前缀。

全局变量名

遵循函数规则。

函数名

函数名全小写,可以使用下划线分隔来提高可读性。

函数与方法参数

使用self作为实例方法的第一个参数。

使用cls作为类方法的第一个参数。

当函数的参数名与保留字冲突时,使用下划线后缀(第二次提醒)。

方法名与实例变量

遵循函数规则。

在私有方法和实例变量前用单下划线前缀。

使用双下划线前缀来调用"name mangling"来避免与子类命名冲突。

如果类Foo有个属性叫__a,那么它不能使用Foo.__a读取,但仍然可以Foo._Foo__a来读取。

常量

常量通常在模块级别定义,使用全大写和下划线分隔的形式。

继承设计

在设计类的方法或实例变量时,应当觉得其实公有的还是非公有的。当不能确定时,设计为私有的。

在Python中没有真正的私有属性。

公有属性不应当使用下划线开始。

当公有属性与保留字冲突时,在名称后面加下划线后缀(第三次提醒)。

对于简单的公有属性,最好直接访问其属性名,而非get/set方法。

编程建议

代码应当适用于Python的多个实现。比如不要依赖CPython的高效字符串语句 a+=b,而应当使用join,从而保证在不同实现上的线性开销。

当与类似于None的单例(singleton)进行比较式,要使用is 或者 is not, 而不是使用等于操作。

当使用复杂比较实现排序操作时,最好实现全部的六个比较操作。

使用基于对象的异常。

模块或者包应当定义自己的异常基类,这个类应当继承自内置的Exception类。

当抛出一个异常的时候,使用raise ValueError(‘message‘)代替旧的raise ValueError, ‘message‘格式。这是由于当异常的参数很长或者是格式化字符串的时候,由于括号的关系,我们不需要使用多行连接符。 旧的格式在Python 3 中被移除。

当捕获一个异常的时候,要用详细的异常声明来代替简单的except: 语句。

一个空的except:语句将会捕获 SystemExit 和 KeyboardInterrrupt 异常。这会使得很难用Control-C来中断一个程序,并且还会隐藏其他的问题。

另外,对于所有的try/except语句,限制try语句来减少必要代码的数量。 再者,可以避免掩盖问题。

Yes:

try:
    value = collection[key]
except KeyError:
    return key_not_found(key)
else:
    return handle_value(value)

No:

try:
    # Too broad!
    return handle_value(collection[key])
except KeyError:
    # Will also catch KeyError raised by handle_value()
    return key_not_found(key)

使用‘‘.startswith() 和 ‘‘.endswith()而非字符切片去检测前缀或后缀。

对象类型比较总要用 isinstance() 而非直接比较。

对于序列,(strings, lists, tuples),利用空序列为false这一点来进行判断,而非使用长度来判断。

别用‘==’进行布尔值和 True 或者 False 的比较。

时间: 2025-01-08 06:41:07

Python编程规范(PEP8)的相关文章

简明 Python 编程规范

赖勇浩(http://laiyonghao.com) 注:之前发布一篇<简明 Python 编程规范>(见:http://blog.csdn.net/lanphaday/article/details/2834883),本是我给当时所在的公司制定的,发表到博客的时候,对齐等问题都有一些错误,还包括一些错别字.到后来,我又有做过修正.大概在 2010 年 8 年,我又由 C++ 开发转到 Python 开发,便在那之前的基础上润饰和完善,形成第二版.前段时间 simple-is-better.c

PEP8 Python编程规范

官方文档: https://www.python.org/dev/peps/pep-0008/ ------------------------------------------------------------------------ PEP8中文翻译: http://www.cnblogs.com/ajianbeyourself/p/4377933.html -----------------------------------------------------------------

python 编码规范PEP8

PEP8 Python 编码规范整理 无规矩不成方圆, 学习python也要遵循相关的编码规范 PEP8 Python 编码规范 一 代码编排 1 缩进.4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格. 2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在操作符的后边敲回车. 3 类和top-level函数定义之间空两行:类中的方法定义之间空一行:函数内逻辑无关段落之间空一行:其他地方尽量不要再空行. 二 文档编排 1 模块内容的顺序:模块说明

学习 python 编写规范 pep8 的问题笔记

决定开始Python之路了,利用业余时间,争取更深入学习Python.编程语言不是艺术,而是工作或者说是工具,所以整理并遵循一套编码规范是十分必要的.所以今天下午我根据PEP 8整理了一份,以后都照此编码了,还会持续更新. PEP8 Python 编码规范 一 代码编排1 缩进.4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格.2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在操作符的后边敲回车.3 类和top-level函数定义之间空两行:类

Python编程规范

本节内容如下: 代码块大括号 分号 行长度 括号 缩进 空行 空格 类 导入格式 语句 命令 代码块大括号 代码使用缩进的方式,而不是大括号是Python语言规范中的一大特点,如果你有其他语言基础的话,可能需要适应一下: flag = True if flag:     print('代码块1')     print('代码块2') else:     print('代码块3')     print('代码块4') 分号 不要在行尾加分号, 也不要用分号将两条命令放在同一行.查看原文 行长度 每

002.[python学习]python编码规范pep8学习——PEP8第一部分代码布局

关于PEP8的详细说明可以参考官方原文:http://legacy.python.org/dev/peps/pep-0008/ 我参考官方文档及其他文章,摘出相关内容而得此文章,具体参考其他文章见文中最后参考资料处. 当想要让自己所写的代码为更多人使用.交流学习时,不能写出只有机器认识的代码,而是对于人而言具有良好的可读性,此时就需要遵从一个公共的约束来规范自己的代码,那么<Style Guide for Python Code(PEP8)>是个很好的选择. 首先PEP8中声明,有以下有理由忽

python编程规范与代码优化建议

1.严格使用缩进来体现代码的逻辑从属关系. python对代码的缩进是硬性要求,这一点必须时刻注意.如果某个代码段的缩进不对,那么整个程序就是错的,要么是语法错误无法执行,要么是逻辑错误导致错误结果,而检查这样的错误会花费很多时间. 2.每个import语句只导入一个模块,最好按标准库.扩展库.自定义库的顺序依次导入. 尽量避免导入整个库,最好只导入确实需要使用的对象,这会让程序运行更快. 3.最好在每个类.函数定义和一段完整的功能代码之后增加一个空行,在运算符两侧各增加一个空格,逗号后面增加一

PEP 8 python编程规范

一 代码编排 缩进.4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格. 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在操作符的后边敲回车. 类和top-level函数定义之间空两行:类中的方法定义之间空一行:函数内逻辑无关段落之间空一行:其他地方尽量不要再空行. 二 文档编排 模块内容的顺序:模块说明和docstring-import-globals&constants-其他定义.其中import部分,又按标准.三方和自己编写顺序依次排放,之间

python 编程 规范

对于自己需要注意的: 1)不要使用反斜杠连接行. Python会将 圆括号, 中括号和花括号中的行隐式的连接起来 , 你可以利用这个特点. 如果需要, 你可以在表达式外围增加一对额外的圆括号.