PEP 8 是python代码规范说明,里面规定了一些推荐的python代码的格式与用法。笔者将在本文中作一些总结,不是为了纯粹的翻译PEP 8,而是根据我的习惯与喜爱进行的一个整理。若有谬误,欢迎指出。python
PEP 8 官方文档:这里api
永远不要为了和已有的文档保持一致而特地作出不天然的改变,不然,这只会限制你的思惟,下降你的效率。Guido在这里写下的这些规范是处于代码的可读性考虑的,可是若是有的时候这些规范也不必定适用,例如:app
若是使用了这些规范会下降可读性;ide
若是代码写于规范面世之前;函数
若是代码使用到了老版本的依赖库,然而这些老版本的依赖库且兼容新的规范;ui
若是已有代码使用了另外的一种风格;this
多参数状况下适当缩进spa
# function def long_function_name( # no argument on the first line var_one, var_two, # more indentation to distinguish this from the rest var_three, var_four): print(var_one) # list my_list = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, # add a comma here to be consistent with the preceding lines ] # long if -statement if (this_is_one_thing and that_is_another_thing) # more indentation to distinguish this do_something()
使用4个空格键<space>替代制表键<tab>翻译
每行字符数控制在79个之内,必要的时候可以使用\
rest
with open('/path/to/the/file/to/read') as file_1, \ open('/path/to/the/file/to/read') as file_2: file_2.write(file_1.read())
多行分别import依赖库,且须放在全局变量和常量以前
import os import sys import other_standard_libraries import related_third_parties ipmort local applications
python不区分双引号"
和单引号'
,选一个适合你本身的风格,而后坚持下去
空白符的规则很繁琐,基本上和英文书写的规范一致,下面列举了部分状况
ham[1:9], ham[1:9:3], ham[1::3], ham[1:9:] ham[lower+offset : upper+offset] # equal amounts on either side of the operator
在分配默认值或者键值对赋值的时候,等号=
周围不要用空格
def complex(real, imag=0.0): return magic(r=real, i=img)
关于注释,不要添加与代码逻辑相违背的注释,也不要添加显而易见的注释。记住一点,注释是为了加强可读性。
关于命名,不一样的对象会有不一样的规范:
包:小写,能够使用可是不推荐使用下划线_
。一些利用C/C++编写的包的名字能够如下划线开头;
类:CapWords命名规范,例如CapitalizeWords
, HTTPServerError
异常:其本质是一个类,因此沿用上面的规范,另外须要以Error_
开头
函数:小写,而且用下划线隔开
方法与变量:沿用函数的命名规范,另外非公有变量须要以_
开头
与None
做比较的使用,不要使用==
,使用is
或者is not
字符串的合并操做不要使用a += b
或者a = a + b
,使用''.join()
从Excepetion
而不是BaseException
库中继承异常
抛出异常的时候,请使用raise ValueError('message')
在捕捉异常语句中,请尽量指明捕捉的异常类别。若是须要捕捉全部扰乱程序的异常,能够使用
try: some_magic() except Exception as exc: print(str(exc)) raise some_error else: everything_is_good() finally: clean_up()
对于不一样的输入,函数的返回值类型应该保持一致
def foo(x): if x >= 0: return math.sqrt(x) else: return None # should also be a value or None
字符串操做中,尽量使用字符串类的方法
''.startswith() ''.endswith()
判断对象的类别,尽可能使用isinstance()
欢迎讨论,欢迎指出问题
Weiming
25 May 2016