【python】python编码规范

来源:http://www.prospettivedarte.com 作者:计算机教程 人气:155 发布时间:2019-05-11
摘要:前言 本文是阅读《Python CodingRule》之后总结的最为精华及简单的编码规范,根据每个人不同喜好有些地方会有不同的选择,我只是做了对自己来说最简单易行的选择,仅供大家参考。

前言

本文是阅读《Python Coding Rule》之后总结的最为精华及简单的编码规范,根据每个人不同喜好有些地方会有不同的选择,我只是做了对自己来说最简单易行的选择,仅供大家参考。

PEP是 Python Enhancement Proposal 的缩写,是Python增强建议书的意思。Python的代码风格由PEP 8描述。这个文档描述了Python编程风格的方方面面。在遵守这个文档的条件下,不同程序员编写的Python代码可以保持最大程度的相似风格。这样就易于阅读,易于在程序员之间交流。

重要原则

  1. 保持风格的一致性很重要,但最重要的是:知道何时不一致
  2. 打破一条既定规则的两个好理由:
    • 当应用规则会导致代码可读性下降(可读性赛高)
    • 为了和周围代码保持一致而打破规则(历史遗留)

不同的命名风格

有许多不同的命名风格。以下的有助于辨认正在使用的命名风格,这独立于它们的作用。

  • 小写串 (lowercase)
  • 带下划线的小写串 (lower_case_with_underscores)
  • 大写串 (UPPERCASE)
  • 带下划线的大写串 (UPPER_CASE_WITH_UNDERSCORES)
  • 首字母大写单词串 (CapitalizedWords) (或 CapWords、CamelCase,因其字母看起来错落有致,故得此名)注意: 在CapWords中使用缩写,需要把缩写的所有字母大写。故HTTPServerError比HttpServerError更好。
  • 混合大小写串 (mixedCase) (与首字母大写串不同之处在于第一个字符是小写的!)
  • 带下划线的首字母大写串 (Capitalized_Words_With_Underscores)

最简规范

  1. 只使用空格缩进
  2. 使用UTF-8编码
  3. 每行只写一条语句
  4. 使用行末反斜杠折叠长行,限制每行最大79字符
  5. 导入包:每行唯一、从大到小、绝对路径
  6. 类内方法空1行分隔,类外空2行分隔
  7. 运算符除 * 外,两边空1格分隔,函数参数=周围不用空格
  8. 除类名使用驼峰法以外,其他模块、函数、方法、变量均使用全小写 下划线
  9. 1个前导下划线表示半公开,2个前导下划线表示私有,与保留字区分使用单个后置下划线
  10. 开发时使用中文注释,发布时再写英文文档

避免采用的名字

决不能使用字母'l'、'O'、'I' 作为单个字符的变量名。在一些字体中,这些字符不能与数字1和0区别开。当想要使用'l'时,用'L'代替它。

详细规范

包和模块名(Package and Module Names)

模块名应该是简短的、全部小写的名字。可以在模块名中使用下划线以提高可读性。Python包名也应该是简短的、全部小写的名字,尽管不推荐使用下划线。因为模块名被映射到文件名,有些文件系统大小写不敏感并且截短长名字,所以把 模块名选择为相当短就很重要了——这在Unix上不是问题,但当把代码迁移到Mac、Windows或DOS上时,就可能是个问题了。当一个用C或C 写的扩展模块,有一个伴随的Python模块来提供一个更高层的接口时,C/C 模块名有一个前导下划线 (如:_socket)。

全文通用

  1. 只使用空格缩进,4个空格表示1个缩进层次
  2. 每行长度限制在79字符内,使用行末反斜杠折叠长行
  3. 使用UTF-8编码
  4. 每行只写一条语句

类名(Class Names)

几乎没有例外,类名使用首字母大写单词串的约定。内部使用的类使用一个额外的前导下划线。

代码命名

  1. 一行只import一个包,Imports的顺序为:标准库、相关主包、特定应用,每组导入之间放置1行空行,所有导入使用包的绝对路径
  2. 分割顶层函数和类的定义使用2行空行,分割类内方法定义使用1行空行,class行与第一个方法定义之间要有1行空行
  3. 整体使用英文书写方式来使用空格,即仅在逗号、分号后面添加1个空格,其他任何符号如圆括号、方括号、花括号等都不用空格把符号与字符分开,写在一起表示一个整体;运算符除 * 号以外,其他符号两边都各用1个空格分隔;函数参数=号周围不用空格
  4. 模块名:不含下划线、简短、全小写;类名、异常名:首字母大写单词串的驼峰法;函数名、全局变量名、方法名、实例变量:全小写,加下划线增加可读性;一个前导下划线仅用于不想被导入的全局变量(还有内部函数和类)前加一个下划线)、不打算作为类的公共接口的内部方法和实例变量;两个前导下划线以表示类私有的名字,只用来避免与类(为可以子类化所设计)中的属性发生名字冲突
  5. 私有属性必须有两个前导下划线,,无后置下划线;非公有属性必须有一个前导下划线,无后置下划线。公共属性没有前导和后置下划线,除非它们与保留字冲突,此情况下,单个后置下划线比前置或混乱的拼写要好,例如:class_优于klass。

异常名 (Exception Names)

因为异常应该是类,故类命名约定也适用于异常。然而,你应该对异常名添加后缀"Error"(如果该异常的确是一个错误)。

编写技巧

  1. 与None之类的单值比较,永远用:'is'或'is not'来做:if x is not None
  2. 在模块和包内定义基异常类(base exception class)
  3. 使用字符串方法(methods)代替字符串模块
  4. 在检查前缀或后缀时避免对字符串进行切片,用startswith()和endswith()代替,如:No: if foo[:3] == 'bar':Yes: if foo.startswith('bar'):
  5. 只用isinstance()进行对象类型的比较,如:No: if type(obj) is type(1):Yes: if isinstance(obj, int)
  6. 判断True或False不要用 ==,如:No: if greeting == True:Yes: if greeting:

全局变量名(Global Variable Names)

(我们希望这些变量只打算用于一个模块内部)。对设计为通过"from M import "来使用的模块,应采用all机制来防止导出全局变量;或者使用旧的约定,为该类全局变量加一个前导下划线(可能你想表明这些全局变量是只限制在该模块内部使用,"module non-public")。

补充:在python的module中,可以使用 all 函数来定义这个module像其他引用自己的module导入的变量:

__all__ = ['bar', 'baz']waz = 5bar = 10

当另一个模块中使用import *声明,waz和bar变量不会被导入,all可以隐藏不想被import的默认值。

注释

  1. 开发时,注释全部用中文来写,当要发布脚本工具时,再写英文文档
  2. 注释应该是是完整的句子(短语也可),首字母大写;如果注释很短,省略末尾句号;注释块由一个or多个完整句子构成的段落组成,则每个句子使用句子结尾;句末句号后使用两个空格
  3. 注释块每行以#和一个空格开始,并且跟随注释的代码具有相同的缩进层次,注释块上下方有一空行包围
  4. 谨慎使用行内注释,至少使用两个空格与语句分开
  5. 使用 pydoc; epydoc; Doxgen 等文档化工具,为所有公共模块、函数、类和方法边写文档字符串,文档字符串对非公开的方法不是必要的,但你应该有一个描述这个方法做什么的注释,这个注释应该在"def"这行后
  6. 多行文档字符串结尾的""" 应该单独成行
  7. 版本注记:定义一个变量__version__ = "$Revision: 1.4 $"

函数名(Function Names)

函数名应该为小写,必要时可用下划线分隔单词以增加可读性。混合大小写 (mixedCase) 仅被允许用于这种风格已经占优势的上下文 (如: threading.py),以便保持向后兼容。

本文由皇牌天下投注网发布于计算机教程,转载请注明出处:【python】python编码规范

关键词:

上一篇:office online server部署和简单操作

下一篇:没有了

最火资讯