`

python PEP8规范

 
阅读更多

 工作中写了个Python的模块,CodeReview的时候被告知有些不符合Python规范的地方。于是找到了PEP8的全文(http://www.python.org/dev/peps/pep-0008/)阅读了一番,还是受益匪浅。下面是做的一些摘要。

在项目中保持风格的一致性。

代码布局

缩进

对于每一次缩进使用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 = http://www.cnblogs.com/zeutrap/archive/2012/08/29/collection[key]except KeyError:    return key_not_found(key)else:    return handle_value(value)

    No:

    try:    # 太宽了!    return handle_value(collection[key])except KeyError:    # 将会Catch 函数handle_value()中抛出的异常    return key_not_found(key)
使用''.startswith() 和 ''.endswith()而非字符切片去检测前缀或后缀。
对象类型比较总要用 isinstance() 而非直接比较。
对于序列,(strings, lists, tuples),利用空序列为false这一点来进行判断,而非使用长度来判断。
别用‘==’进行布尔值和 True 或者 False 的比较。
分享到:
评论

相关推荐

    Python PEP8 编码规范中文版.pdf

    Python PEP8 编码规范中文版 Python PEP8 编码规范中文版是 Python 官方发布的编码规范指南,旨在提供一致的编码风格,提高代码的可读性和维护性。该规范涵盖了代码布局、命名惯例、编程风格等多方面的内容。 ...

    python PEP8 编码规范总结

    参照https://legacy.python.org/dev/peps/pep-0008/官方文档简单总结了python编程过程中应当遵守的编码规范,比如函数的命名、变量的命名等(PEP8编码规范)。

    Python编程规范PEP8.pdf

    Python编程规范PEP8是一个由Python社区广泛认可和遵循的编程风格指南。它的全称是“Style Guide for Python Code”,旨在提升Python代码的可读性和一致性。PEP8最初由Python的创始人Guido van Rossum、Barry Warsaw...

    Python PEP8 编码规范中文版

    Python PEP8 编码规范中文版旨在为Python编程语言提供一套统一的代码编写标准,以便提升代码的可读性和一致性。PEP是Python Enhancement Proposal的缩写,它代表了Python增强提案,而PEP8是一份专门针对Python代码...

    PEP8Python 编码规范

    在Python社区中,PEP8是指导Python代码格式的官方编码规范,它对如何组织代码提供了许多建议,以确保代码的可读性和一致性。PEP8主要是针对Python代码的风格指南,其目的不是强制要求,而是为了提高代码的可读性和可...

    Python PEP8编码规范中文版

    PEP8编码规范,全称为“Style Guide for Python Code”,是由Python社区制定的一套编程风格指南,旨在提高Python代码的可读性和一致性。自2001年首版发布以来,经过多次修订和完善,PEP8已成为Python编程中普遍遵循...

    Python PEP8 编码规范中文版.zip

    **Python PEP 8编码规范中文版** Python PEP 8是Python编程语言的官方风格指南,由Guido van Rossum(Python之父)在2001年提出。PEP 8全称为"Python Enhancement Proposal 8",是Python社区广泛接受的代码风格指南...

    PEP8Python编码规范.pdf

    "PEP8 Python 编码规范" PEP8 是 Python 官方提供的一份编码规范指南,旨在提高 Python 代码的可读性、可维护性和可重用性。本文档将对 PEP8 中的各种规范进行详细解释和总结。 缩进和换行 PEP8 规定使用 4 个...

    PEP8PYTHON编码规范[文].pdf

    PEP8 Python编码规范总结 PEP8 Python编码规范是Python社区中的一份编码规范文档,旨在提高Python代码的可读性、可维护性和一致性。下面是对PEP8 Python编码规范的总结: 代码编排 * 缩进使用4个空格,禁止使用...

    PEP8规范-python相关

    **Python PEP8规范详解** Python编程语言以其优雅、简洁的语法著称,为了保持代码的可读性和一致性,Python社区制定了PEP8规范。PEP8是Python Enhancement Proposals(Python增强建议)的一部分,由Guido van ...

    PEP8 Python编码规范

    PEP8是Python编程语言的官方编码规范,它由Python的核心开发者Guido van Rossum、Barry Warsaw和Nick Coghlan等人撰写和维护,最初于2001年发布。PEP是Python Enhancement Proposals的缩写,意为Python增强提案。PEP...

    Python_PEP8_代码规范.pdf

    ### Python PEP8 代码规范详解 #### 一、引言 本文档旨在提供一份详细的指南,帮助开发者理解和遵循Python编程语言中广泛接受的最佳实践——PEP8代码规范。PEP8是Python Enhancement Proposal(Python改进提案)的...

    Python PEP8编码规范

    ### Python PEP8编码规范详解 #### 一、引言 PEP 8 是 Python 社区广泛接受的编码风格指南,旨在提高代码的可读性和一致性。它由 Python 的创始人 Guido van Rossum 最初撰写,并随着社区的发展不断完善。PEP 8 被...

    python pep8编码规范

    ### Python PEP8编码规范详解 #### 一、引言 PEP 8,全称为“Python Code Style Guide”,是Python官方推荐的编程规范指南。它由Python之父Guido van Rossum与其他开发者共同制定,并于2001年7月5日首次发布。PEP ...

    PythonPEP8编码规范中文版--高清.rar

    **Python PEP 8编码规范中文版** Python PEP 8是Python编程语言的官方编码风格指南,由Guido van Rossum(Python之父)在2001年提出,旨在提升代码的可读性和一致性。这个规范对于任何Python开发者来说都极其重要,...

    Python PEP8代码规范原文

    Python PEP8代码规范原文 Source:https://github.com/gprMax/gprMax/blob/master/setup.py

Global site tag (gtag.js) - Google Analytics