zoukankan      html  css  js  c++  java
  • python-PEP8编码规范

    PEP8编码规范

    这篇博客是pep8的翻译版
    https://my.oschina.net/u/1433482/blog/464444

    主要分为7部分

    • 因为在开发过程中读一定是读代码多于写代码,所以保持代码的一致性很重要

    1. 代码布局

    • 缩进:四个空格

    • 方法中多参数的悬挂或者垂直缩进:在IDE中一行到末尾时选择换行???,并在下一行多空格两个,避免与下一级的语句冲突

    • if中多条件连接:跟上面多参基本一致

    • 空格 or tab的选择:用空格,在IDE中自动使用空格作为换行,如果自己在vim中编辑时,要用空格,保持一致

    • 最大行宽:所有行的最大行宽为79个字符,如果是文本(如注释)最大为72字符

    • 空行:1.正常使用,作为分割逻辑快,不要使用过多的空行;2.在顶层函数与定义间用两行空行

    • 文件编码的注意事项:py2中,默认是ascii编码,而py3中是utf8编码,用的是py2,所以尽量避免出现中文,保持ascii么,还是规定编码为utf8???

    • 标准库或者普通库的导入:1.导入一个库在单独行;2.导入始终在文件的顶部,在模块注释和文档字符串之后,在模块全局变量和常量之前;3.导入顺序:标准库,第三方库,本地库。导入之间要有空行;4. 尽量使用绝对路径导入???

    2. 字符串引用

    • python中双引号与单引号字符串是相同的,而且尽量避免在字符串中写反斜杠''

    3. 表达式和语句中的空格

    • 不能使用空格的情况:1.括号内;2.逗号,冒号,分号前;3.索引切片操作符冒号前后???;4.函数名与括号之间;5.列表名与中括号之间;6.优先级较高的运算符左右,比如*;7.方法中默认参数赋值操作符左右;8.

    • 要使用空格的情况:1.二元操作符左右;

    • 冒号一般前面没有,后面有

    • 避免使用';'作为连接两个语句,尽量在一行不写两条语句

    4. 注释

    • 在更新代码时,优先更新注释,不对应的注释比没注释还要糟糕

    • 注释块用#写,每一行间用一个#隔开

    • 注释块内的段落用仅包含单个 '#' 的行分割

    • 文档字符串,用于公共模块、函数、类和方法中,必须写上

    • '#'后面跟着一个空格

    5. 版本标签

    • 如果你必须在源文件中包含git、Subversion、CVS或RCS crud信息,放置在模块的文档字符串之后任何其他代码之前,上下各用一个空行
    __version__ = "$Revision$"# $Source$
    

    6. 命名约定

    • 前面有单下划线:1.弱内部标志:from M import不会导入的对象

    • 后面有单下划线:1.避免与关键字冲突

    • 前面有双下划线:1.对类这样命名的时候,会触发名字重整

    • 避免使用的名字:1.'i',小写i;2.'I',大写i;3.'O',大写o;

    • 模块名、包名:模块名全部小写,用下划线连接;包名也是小写,但是不用下划线

    • 类名:CapWord命名,也就是pascal风格,首字母大写

    • 异常名:在类名后添加Error

    • 全局变量名:变量尽量只用于模块内部,约定类似函数。对设计为通过 "from M import " 来使用的模块,应采用 all 机制来防止导入全局变量;或者为全局变量加一个前置下划线。???

    • 函数名:小写,必要时添加下划线

    • 函数和方法参数:实例方法第一个参数是 'self'。类方法第一个参数是 'cls'。

    • 常量命名:大写字母加下划线

    • 继承命名:公开属性应该没有前导下划线。

    如果公开属性名和保留关键字冲突,可以添加后置下划线

    简单的公开数据属性,最好只公开属性名,没有复杂的访问/修改方法,python的Property提供了很好的封装方法。 d.如果不希望子类使用的属性,考虑用两个前置下划线(没有后置下划线)命名。

    7. 编程中的建议

    • +尽量写为.join()

    • none值比较尽量用is,is not 而不是用==

    • 异常类继承自Exception,而不是BaseException。

    • Python2中用" raise ValueError('message')"代替"raise ValueError, 'message'"

    • 捕获异常时尽量指明具体异常,而不是空"except:"子句

    • Python 2.6以后建议用as显示绑定异常名

    try:
        process_data()
    except Exception as exc:
        raise DataProcessingFailedError(str(exc))
    
    • 函数或者方法在没有返回时要明确返回None。

    • 使用字符串方法而不是string模块。

    • 使用使用 .startswith()和.endswith()代替字符串切片来检查前缀和后缀

    # Yes
    if foo.startswith('bar'):
    
    # No
    if foo[:3] == 'bar':
    
    • 使用isinstance()代替对象类型的比较:
    # Yes
    if isinstance(obj, int):
    
    # Yes
    if isinstance(obj, basestring):
    # 字符串类型
    
    # No
    if type(obj) is type(1):
    
    • 对序列(字符串、列表 、元组), 空序列为false:
    # Yes
    if not seq:
       pass
    if seq:
       pass
    
    # No
    if len(seq):
       pass
    if not len(seq):
       pass
    
    • 字符串后面不要有大量拖尾空格。

    • 不要用 == 进行布尔比较

    # Yes
    if greeting::
       pass
    
    # No
    if greeting == True
       pass
    if greeting is True: # Worse
       pass
    
  • 相关阅读:
    多态与异常处理课后作业
    Java接口与继承作业
    大道至简第六章随笔
    大道至简第五章随笔
    Java数组课程作业
    大道至简第四章随笔
    String课后作业
    大道至简第三章随笔
    Java语法基础动手动脑实践
    大道至简-第二章 心得体会
  • 原文地址:https://www.cnblogs.com/qjx-2016/p/7988179.html
Copyright © 2011-2022 走看看