• 主页
  • 相册
  • 随笔
  • 目录
  • 存档
Total 244
Search AboutMe

  • 主页
  • 相册
  • 随笔
  • 目录
  • 存档

pep8编码风格笔记

2020-01-19

只挑重要且难以auto-pep8的

1. 前言

PEP stands for Python Enhancement Proposal. A PEP is a design document providing information to the Python community, or describing a new feature for Python or its processes or environment. The PEP should provide a concise technical specification of the feature and a rationale for the feature.

PEP 是Python增强提案的缩写。PEP 是一个设计文档,为 Python 社区提供信息,或者描述一个新的 Python 或其过程或环境的新特性。PEP 应该提供一个简明扼要的功能技术规范和功能的理由。

2. 换行应该在二元操作符的前面

# 源文件编码
  • Python核心发布中的代码应该始终使用UTF-8
  • 所有标识符必须使用ASCII标识符和英文单词

3. 导入

导入应该按照以下顺序分组

  • 标准库导入
  • 相关的第三方导入
  • 特定的本地应用/库导入
  • 在每个导入组之间放一行空行

4. 绝对导入与相对导入

  • 明确的相对导入可以用来接受替代绝对导入,特别是处理复杂包布局时,绝对导入过于冗长
  • 标准库代码应该避免复杂包布局并使用绝对导入
  • 避免使用通配符导入(from <模块名> import *),因为它们使哪些名字出现在命名空间变得不清楚

5. 尾部逗号

  • 为了代码更加清晰,元组只有一个元素时请务必用括号括起来

  • 每个元素独占一行,然后尾部都有逗号,在最后一个元素的下一行写闭标签。如果你的数据结构都是写在同一行的,就没有必要保留尾部逗号了

6. 命名规范

7. 驼峰命名法(CapWords)

  • 首字母大写的字符串
  • 当CapWords中使用缩写,大写所有的缩写字母。因此HTTPServerError优于HttpServerError

8. 特殊形式

  • 单前导下划线:弱“内部使用”标志。例如 from M import *不会导入以下划线开头的对象。

  • 单后置下划线:按惯例使用避免与Python关键字冲突,例如Tkinter.Toplevel(master, class_='ClassName')

  • 双前导下划线:当命名类属性,调用时名称改编(类FooBar中,__boo变成_FooBar__boo;见下文)。

  • 前导和后置都是双下划线:存在于用户控制的命名空间的“神奇”的对象或属性。

9. 避免采用的名字

  • 不要使用字符‘l’(小写字母el),‘O’(大写字母oh)或‘I’(大写字母eye)作为单字符变量名。

  • 在某些字体中,这些字符与数字1和0是没有区别的。当想使用‘l’时,用‘L’代替

10. 包名和模块名

  • 模块名应该短,所有的字母小写。可以在模块名中使用下划线来提高可读性。Python包名也应该短,所有的字母小写,不鼓励使用下划线。

  • 当一个C或C++书写的扩展模块,伴随Python模块来提供了一个更高层次(例如更面向对象)的接口时,C/C++模块名有一个前导下划线(如_socket)

11. 类名

类名通常使用首字母大写字符串的规则

12. 全局变量名

模块设计为通过from M import *来使用,应使用__all__机制防止导出全局变量,或使用加前缀的旧规则,为全局变量加下划线(可能你像表明这些全局变量是“非公开模块”)

13. 函数和方法参数

  • 使用self做实例化方法的第一个参数。
  • 使用cls做类方法的第一个参数。
  • 如果函数的参数名与保留关键字冲突,最好是为参数名添加一个后置下划线而不是使用缩写或拼写错误。因此class_ 比clss好。(也许使用同义词来避免更好。)。

14. 函数名

函数名应该是小写字母,必要时单词用下划线分开以提高可读性

15. 常量

常量通常定义于模块级别并且所有的字母都是大写,单词用下划线分开。例如MAX_OVERFLOW和TOTAL

16. 程序设计建议

  • 不要依赖CPython的高效实现字符串连接的语句形式 += b或a = a + b

    • 应使用’’.join()形式。这将确保跨越不同实现的连接发生在线性时间
  • 与单值比如None比较使用is或is not ,不要用等号操作符

    • 大概也就True/False/None这些
  • 使用if x is not None,谨防编写if x

  • 使用is not操作符而不是not…is

  • 当实现有丰富的比较的排序操作时,最好实现所有六个操作符(__eq__,__ne__,__lt__,__le__,__gt__,__ge__)而不是依靠其它代码只能进行一个特定的比较。为了减少所涉及的工作量,functools.total_ordering()装饰器提供了一个工具来生成缺失的比较函数

  • 使用def语句而不是使用赋值语句将lambda表达式绑定到标识符上

  • Program Language
  • Python
  • Basic
脚本与模块
python源码分析-1
  1. 1. 1. 前言
  2. 2. 2. 换行应该在二元操作符的前面
  3. 3. 3. 导入
    1. 3.1. 4. 绝对导入与相对导入
  4. 4. 5. 尾部逗号
  5. 5. 6. 命名规范
    1. 5.1. 7. 驼峰命名法(CapWords)
    2. 5.2. 8. 特殊形式
    3. 5.3. 9. 避免采用的名字
    4. 5.4. 10. 包名和模块名
    5. 5.5. 11. 类名
    6. 5.6. 12. 全局变量名
    7. 5.7. 13. 函数和方法参数
    8. 5.8. 14. 函数名
    9. 5.9. 15. 常量
  6. 6. 16. 程序设计建议
© 2024 何决云 载入天数...