写出优雅的代码,自己调试bug更加容易,也便于别人查看,下面谈谈一下让代码更加优雅的写法,主要是基于 PEP8。
1,缩进与换行,每级缩进使用4个空格。
# yes:
# 续行与其包裹元素要对齐
foo = long_function_name(var_one, var_two,
var_three, var_four)
# No:
# 这种就不好
foo = long_function_name(var_one, var_two,
var_three, var_four)
2,限制所有行的最大长度为 79 个字符。
3,空行。
顶层函数和类之间使用两个空行。
类的方法之间使用一个空行。
在函数中使用空行来表示不同的逻辑段落。
4,导入通常应当使用单独的行。
# Yes:
import os
import sys
# No:
import sys, os
但是可以这么做:
from subprocess import Popen, PIPE
导入总是位于文件的顶部,在模块注释和文档字符串之后,在模块的全局变量与常量之前。
导入应该按照以下的顺序分组:
standard library imports 标准库导入
related third party imports 相关第三方导入
local application/library specific imports 本地应用程序/库的特定导入
每组导入之间使用空行隔开。
从一个包含类的模块中导入类时,常常这么写:
from myclass import MyClass
from foo.bar.yourclass import YourClass
5,下面的情况,避免多余空格。
紧贴着圆括号、方括号和花括号:
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]
在赋值(或其他)语句的运算符周围,不要为了对齐而使用多个空格。
Yes:
x = 1
y = 2
long_variable = 3
No:
x = 1
y = 2
long_variable = 3
总是在这些二元运算符前后加一个空格:赋值(=),自增赋值(+=,-= 等等), 比较(==,<,>,!=,<>,<=,>=,in,not in,is,is not),布尔运算(and,or,not)。
在算术运算符前后加空格:
Yes:
i = i + 1
submitted += 1
x = x * 2 - 1
hypot2 = x * x + y * y
c = (a + b) * (a - b)
No:
i=i+1
submitted +=1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)
不要在一个关键字参数或者一个缺省参数值的 = 符号前后加一个空格。
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)
通常不推荐使用复合语句(一行代码中有多条语句)。
Yes:
if foo == 'blah':
do_blah_thing()
do_one()
do_two()
do_three()
No:
if foo == 'blah': do_blah_thing()
do_one(); do_two(); do_three()
6,注释
不好理解的注释不如没有注释。注释要和代码保持与时俱进!
注释应该是一条完整的句子。如果注释是一个短语或句子,它的第一个字应该大写,除非它是一个小写字母开头的标识符(绝对不要改变标识符的大小写)。
如果注释很短,那么结尾的句号可以省略。块注释通常由一个或多个段落组成, 这些段落由完整的句子构成,每个句子都应该使用句号结尾。
句号结尾的句子后面应该有2个空格。
来自非英语国家的Python程序员:请使用英语写注释,除非你120%肯定你的代码将永远不会 被不说你的语言的人阅读。
7,命名规范。
永远不要使用 ‘l’(小写的L),’O’(大写的O),或者’I’(大写的I)作为单字变量名。
毫无例外,类名要用首字母大写的规则。内部类,要加上前导下划线。
函数名应该用小写,为了增加可读性可以用下划线分隔。
使用函数命名规则:使用下划线分隔的小写字母会提高可读性。
8,其他。
别用‘==’进行布尔值和 True 或者 False 的比较
Yes: if greeting:
No: if greeting == True: