美文网首页
Python code style guide

Python code style guide

作者: minhelloworld | 来源:发表于2020-02-17 10:29 被阅读0次

    Python的代码风格,目前貌似大家更倾向于google style,本文用来记录一下其中经常被遗忘的一些关键点。

    1、行长度

    1. 不要使用反斜杠连接行.
    2. Python会将 圆括号, 中括号和花括号中的行隐式的连接起来 , 你可以利用这个特点. 如果需要, 你可以在表达式外围增加一对额外的圆括号.
    Yes: foo_bar(self, width, height, color='black', design=None, x='foo',
                 emphasis=None, highlight=0)
    
         if (width == 0 and height == 0 and
             color == 'red' and emphasis == 'strong'):
    
    1. 如果一个文本字符串在一行放不下, 可以使用圆括号来实现隐式行连接:
    x = ('This will build a very long long '
         'long long long long long long string')
    
    1. 在注释中,如果必要,将长的URL放在一行上。
    Yes:  # See details at
          # http://www.example.com/us/developer/documentation/api/content/v2.0/csv_file_name_extension_full_specification.html
    

    2、空行

    1. 顶级定义之间空两行, 比如函数或者类定义. 方法定义, 类定义与第一个方法之间, 都应该空一行. 函数或方法中, 某些地方要是你觉得合适, 就空一行.

    3、Shebang

    1. 大部分.py文件不必以#!作为文件的开始. 根据 PEP-394 , 程序的main文件应该以 #!/usr/bin/python2或者 #!/usr/bin/python3开始.
      (译者注: 在计算机科学中, Shebang (也称为Hashbang)是一个由井号和叹号构成的字符串行(#!), 其出现在文本文件的第一行的前两个字符. 在文件中存在Shebang的情况下, 类Unix操作系统的程序载入器会分析Shebang后的内容, 将这些内容作为解释器指令, 并调用该指令, 并将载有Shebang的文件路径作为该解释器的参数. 例如, 以指令#!/bin/sh开头的文件在执行时会实际调用/bin/sh程序.)

    4、类

    1. 如果一个类不继承自其它类, 就显式的从object继承. 嵌套类也一样.
    Yes: class SampleClass(object):
             pass
    
    
         class OuterClass(object):
    
             class InnerClass(object):
                 pass
    
    
         class ChildClass(ParentClass):
             """Explicitly inherits from another class already."""
    

    5、字符串

    1. 避免在循环中用+和+=操作符来累加字符串. 由于字符串是不可变的, 这样做会创建不必要的临时对象, 并且导致二次方而不是线性的运行时间. 作为替代方案, 你可以将每个子串加入列表, 然后在循环结束后用 .join 连接列表. (也可以将每个子串写入一个 cStringIO.StringIO 缓存中.)
    Yes: items = ['<table>']
         for last_name, first_name in employee_list:
             items.append('<tr><td>%s, %s</td></tr>' % (last_name, first_name))
         items.append('</table>')
         employee_table = ''.join(items)
    
    No: employee_table = '<table>'
        for last_name, first_name in employee_list:
            employee_table += '<tr><td>%s, %s</td></tr>' % (last_name, first_name)
        employee_table += '</table>'
    
    1. 在同一个文件中, 保持使用字符串引号的一致性. 使用单引号’或者双引号”之一用以引用字符串, 并在同一文件中沿用.
    1. 文档字符串必须使用三重双引号”“”. 不过要注意, 通常用隐式行连接更清晰, 因为多行字符串与程序其他部分的缩进方式不一致.
    Yes:
        print ("This is much nicer.\n"
               "Do it this way.\n")
    
    No:
          print """This is pretty ugly.
      Don't do this.
      """
    

    6、TODO注释

    1. 为临时代码使用TODO注释, 它是一种短期解决方案. 不算完美, 但够好了. TODO注释应该在所有开头处包含”TODO”字符串, 紧跟着是用括号括起来的你的名字, email地址或其它标识符. 然后是一个可选的冒号. 接着必须有一行注释, 解释要做什么
    # TODO(kl@gmail.com): Use a "*" here for string repetition.
    # TODO(Zeke) Change this to use relations.
    

    7、导入格式

    1. 每个导入应该独占一行;

    2. 导入总应该放在文件顶部, 位于模块注释和文档字符串之后, 模块全局变量和常量之前. 导入应> 该按照从最通用到最不通用的顺序分组:

      1. 标准库导入
      1. 第三方库导入
      1. 应用程序指定导入
    1. 每种分组中, 应该根据每个模块的完整包路径按字典序排序, 忽略大小写.

    8、命名

    module_name, package_name, ClassName, method_name, ExceptionName, function_name, GLOBAL_VAR_NAME, instance_var_name, function_parameter_name, local_var_name.
    

    命名约定

    1. 所谓”内部(Internal)”表示仅模块内可用, 或者, 在类内是保护或私有的.
    2. 用单下划线(_)开头表示模块变量或函数是protected的(使用from module import *时不会包含).
    3. 用双下划线(__)开头的实例变量或方法表示类内私有.
    4. 将相关的类和顶级函数放在同一个模块里. 不像Java, 没必要限制一个类一个模块.
    5. 对类名使用大写字母开头的单词(如CapWords, 即Pascal风格), 但是模块名应该用小写加下划线的方式(如lower_with_under.py). 尽管已经有很多现存的模块使用类似于CapWords.py这样的命名, 但现在已经不鼓励这样做, 因为如果模块名碰巧和类名一致, 这会让人困扰.

    9、Main

    1. 即使是一个打算被用作脚本的文件, 也应该是可导入的. 并且简单的导入不应该导致这个脚本的主功能(main functionality)被执行, 这是一种副作用. 主功能应该放在一个main()函数中, 所有的顶级代码在模块导入时都会被执行. 要小心不要去调用函数, 创建对象, 或者执行那些不应该在使用pydoc时执行的操作.
    def main():
          ...
    
    if __name__ == '__main__':
        main()
    

    相关文章

      网友评论

          本文标题:Python code style guide

          本文链接:https://www.haomeiwen.com/subject/dyxbfhtx.html