首页 存档 技术 查看内容

Google Python 编程风格指南(二)  Python 风格指南 - 内容目录

2018-3-30 13:00 |来自: 互联网 364 0

摘要:  Python 风格指南 - 内容目录 背景 Python语言规范 Lint 导入 包 异常 全局变量 嵌套/局部/内部类或函数 列表推导(List Comprehensions) 默认迭代器和操作符 生成器 Lambda函数 条件表达式 默认参数值 属性(prope ...

 Python 风格指南 - 内容目录

  • 背景

  • Python语言规范

    • Lint

    • 导入

    • 异常

    • 全局变量

    • 嵌套/局部/内部类或函数

    • 列表推导(List Comprehensions)

    • 默认迭代器和操作符

    • 生成器

    • Lambda函数

    • 条件表达式

    • 默认参数值

    • 属性(properties)

    • True/False的求值

    • 过时的语言特性

    • 词法作用域(Lexical Scoping)

    • 函数与方法装饰器

    • 线程

    • 威力过大的特性

  • Python风格规范

    • 分号

    • 行长度

    • 括号

    • 缩进

    • 空行

    • 空格

    • Shebang

    • 注释

    • 字符串

    • 文件和sockets

    • TODO注释

    • 导入格式

    • 语句

    • 访问控制

    • 命名

    • Main




 Python风格规范

  分号

  不要在行尾加分号, 也不要用分号将两条命令放在同一行.

  行长度

  每行不超过80个字符

  例外:

  1. 长的导入模块语句

  2. 注释里的URL

  不要使用反斜杠连接行.

  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'):

  如果一个文本字符串在一行放不下, 可以使用圆括号来实现隐式行连接:

x = ('This will build a very long long '
   'long long long long long long string')

  在注释中,如果必要,将长的URL放在一行上。

Yes: # See details at
   # http://www.example.com/us/developer/documentation/api/content/v2.0/csv_file_name_extension_full_specification.html
No: # See details at
   # http://www.example.com/us/developer/documentation/api/content/\
   # v2.0/csv_file_name_extension_full_specification.html

  注意上面例子中的元素缩进; 你可以在本文的缩进部分找到解释.

  括号

  宁缺毋滥的使用括号

  除非是用于实现行连接, 否则不要在返回语句或条件语句中使用括号. 不过在元组两边使用括号是可以的.

Yes: if foo:
     bar()
   while x:
     x = bar()
   if x and y:
     bar()
   if not x:
     bar()
   return foo
   for (x, y) in dict.items(): ...
No: if (x):
     bar()
   if not(x):
     bar()
   return (foo)

  缩进

  用4个空格来缩进代码

  绝对不要用tab, 也不要tab和空格混用. 对于行连接的情况, 你应该要么垂直对齐换行的元素(见行长度部分的示例), 或者使用4空格的悬挂式缩进(这时第一行不应该有参数):

Yes:  # Aligned with opening delimiter
    foo = long_function_name(var_one, var_two,
                var_three, var_four)

    # Aligned with opening delimiter in a dictionary
    foo = {
      long_dictionary_key: value1  
                value2,
      ...
    }

    # 4-space hanging indent; nothing on first line
    foo = long_function_name(
      var_one, var_two, var_three,
      var_four)

    # 4-space hanging indent in a dictionary
    foo = {
      long_dictionary_key:
        long_dictionary_value,
      ...
    }
No:  # Stuff on first line forbidden
   foo = long_function_name(var_one, var_two,
     var_three, var_four)

   # 2-space hanging indent forbidden
   foo = long_function_name(
    var_one, var_two, var_three,
    var_four)

   # No hanging indent in a dictionary
   foo = {
     long_dictionary_key:
       long_dictionary_value,
       ...
   }

  空行

  **定义之间空两行, 方法定义之间空一行

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

  空格

  按照标准的排版规范来使用标点两边的空格

  括号内不要有空格.

Yes: spam(ham[1], {eggs: 2}, [])
No: spam( ham[ 1 ], { eggs: 2 }, [ ] )

  不要在逗号, 分号, 冒号前面加空格, 但应该在它们后面加(除了在行尾).

Yes: if x == 4:
     print x, y
   x, y = y, x
No: if x == 4 :
     print x , y
   x , y = y , x

  参数列表, 索引或切片的左括号前不应加空格.

Yes: spam(1)
no: spam (1)
Yes: dict['key'] = list[index]
No: dict ['key'] = list [index]

  在二元操作符两边都加上一个空格, 比如赋值(=), 比较(==,

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部