Python 代码风格指南—简化版

Python 代码风格指南—简化版_第1张图片
camera-classic-coffee-407294.jpg

通常代码不单单是写给自己看的。

当代码出现bug而你又想不通哪有问题时,就需要把代码贴到论坛或请身边的人审阅。

或者你在公司上班,代码需要交给上级审阅。

或者是你完成了某个项目,然后分享了你的结果,共享了你的代码。

又或者你在Github上发起了一个开源项目。

这些都需要别人阅读你的代码,如果你的代码格式混乱,别人就会失去耐心。这也就加大了你们之间的沟通成本。

所以有必要了解一些基础的代码风格或习惯。

作为官方的Python 代码风格指南,必然要写的详细,因为需要考虑所有的情形。但对于编程新手而言,阅读完整份文档确实有些划不来,因为不需要面对这么多情况。所以我总结了一份缩简版,记录了最基础的代码风格。

虽然是这里说得是Python 代码风格,但实际上绝大多数内容同样适用于其它编程软件。

作为编程新手,最需掌握的是四项内容:命名,空格/空行,缩进, 注释。

一、命名


  1. 变量名不要过于简单,尽量用能表达其含义的英文字母来表达。
Yes: num_student = len(student) 
No: n = len(student)
  1. 不要使用小写l(对应大写L)、大写O和大写I(对应小写i),因为它们很容易混淆
  2. 类名需要首字母大写
  3. 函数名小写字母,并且各字母之间用_分隔
  4. 常量用大写字母

二、空格/空行


通常赋值符或运算符两边需要加上空格,x = a + b 要比 x=a+b 更加整洁。

不使用空格的情况

  1. 行末尾
    行末尾的空格既没有价值,又可能会造在bug。

  2. 逗号与括号之间

Yes: foo = (0,)
No:  bar = (0, )
  1. 紧跟着变量
Yes: if x == 4: print x, y; x, y = y, x
No:  if x == 4 : print x , y ; x , y = y , x
  1. 与冒号有关时
Yes:
ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:]
ham[lower:upper], ham[lower:upper:], ham[lower::step]
ham[lower+offset : upper+offset]
ham[: upper_fn(x) : step_fn(x)], ham[:: step_fn(x)]
ham[lower + offset : upper + offset]

No:
ham[lower + offset:upper + offset]
ham[1: 9], ham[1 :9], ham[1:9 :3]
ham[lower : : upper]
ham[ : upper]

其它提醒

  1. 如果一个表达示中有多级运算,可以在优先级低的运算符周边使用空格,但最多使用一个空格:
Yes:
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)

No:
x = x * 2 - 1
hypot2 = x * x + y * y
c = (a + b) * (a - b)
  1. 对于函数参数中的赋值符,不需要使用空格:
Yes:

def complex(real, imag=0.0):
    return magic(r=real, i=imag)
No:

def complex(real, imag = 0.0):
    return magic(r = real, i = imag)
  1. 二元运算符应该在第二个值之前
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)
  1. 空行
    函数与函数之间需要二个空行分隔。
    函数之间的逻辑块用空行来分隔,这样可以更清楚地看清哪部分是相互关联的。

三、缩进


space VS tab

空格与制表符就是一对冤家,美剧《硅谷》中也特地用了几个场景来描述它们对现实生活产生的麻烦。

指南中建议使用空格,而且每一级缩进用四个空格。但我还是习惯用制表符,因为按一下总比按四下快。当然,制表符在不同的环境下可能会表示不同数量的空格,所以复制别人的代码时可能会造成格式不一致。我想这也是指南中建议用空格的原因。

缩进的数量

  1. 延长部份需要对齐,比如
foo = long_function_name(var_one, var_two,
                         var_three, var_four)
  1. 为了方便阅读,分隔不同意义的语句,使用不同的层级,比如:
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)

而不是:

def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)

四、注释


注释是为了让人更快的理解函数,如果你的注释会造成误解,还不如不写注释。所以当你为一个函数写了注释,并且更改了函数代码时,必需要及时更新你的注释。

注释尽量用英文。

注释总是要以#和空格开始。

注释块:

注释块是对接下来的逻辑代码块进行注释。

注释块需要与解释的代码对齐,并且注释块中的段落用空行分隔。

注释行

在 stetement 后的注释称为注释行或行注释。

注释行与前面的 statement 至少空两格。

文档注释:

文档注释是对函数的说明,需要在 def 下一行就给出。使用三个引号,并且最后的引号要单独一行,比如:

"""Return a foobang

Optional plotz says to frobnicate the bizbaz first.
"""

五、其它


行长

行长控制在79字符之内。

import

在文件开头就引入所有需要的库,并且每行只引入一个库。引入顺序为:

  1. 标准库
  2. 第三方库
  3. 自己写的类/库

这三为类引入之间还需要空行分隔。

编程建议

  1. 如果需要表达if x is not None 就用if x即可。

  2. 用到try except 语句时

Yes:
try:
    value = collection[key]
except KeyError:
    return key_not_found(key)
else:
    return handle_value(value)

No:
try:
    # Too broad!
    return handle_value(collection[key])
except KeyError:
    # Will also catch KeyError raised by handle_value()
    return key_not_found(key)
  1. return
    函数中的return statement 要保持一致,不要为了简便而省略return None

你可能感兴趣的:(Python 代码风格指南—简化版)