肉渣教程

代码风格

上一节 结束

本小节并不打算按照PEP 8的标准来介绍代码风格;而是打算以举例的方式,来塑造代码风格的深层价值观;不必强记,而是用心去感受哪种coding的风格更加优雅。


代码风格

人无完人,对代码风格的要求,无须苛责,无须一定要完全按照某个代码风格的标准去做。但是一定要心存敬畏、心存顾忌、心存对美的追求;因为代码不仅仅是给机器去运行的,也是给人去看的。形成好的习惯,会让写出的代码倾国倾城、沉鱼落雁。

总之一句话,代码要写的尽量好看一些。

不要吝啬空格

在逗号后面、赋值符号、运算符号之间,请不要吝啬空格,加上空格,看起来更舒服一些。

Bad

a=1
b=2*3
c=[1,2,3]
d={'k1':'v1','k2':'v2','k3':'v3'}

Good

a = 1
b = 2 * 3
c = [1, 2, 3]
d = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'} 

不要吝啬空行

适当地添加空行可让人更容易地把握代码的逻辑。

Bad

import math
def output_pi():
    print math.pi
output_pi()

Good

import math

def output_pi():
    print math.pi

output_pi()

不要吝啬变量

如下所示,若条件表达式过长,则不要吝啬变量,这样就不会导致某一行太长。

Bad

if <一个很长的条件表达式> and <另一个很长的条件表达式>:
    # do something

Good

cond1 = <一个很长的条件表达式>
cond2 = <另一个很长的条件表达式>
if cond1 and cond2:
    # do something

优先使用推导式

之前说过推导式的方式,这种方式非常pythonic,能用推导式达到目的就用;因为推导式更少代码、看起来逻辑也更加清楚。

Bad

a = []
for i in xrange(20):
    if i % 2 == 0:
        a.append( i )

Good

a = [i for i in xrange(20) if i % 2 == 0]

更加简洁的条件表达式

非空字符串在布尔测试中都是等价于True的;不等于0的整型或不等于0.0的浮点型都等价于True。此外布尔型在if语句中,可以直接检查,没必要去判断是否等于True或False。

Bad

if cond1 == True:
    print 'True!'

if cond2 == None:
    print 'None!'

Good

if cond1:
    print 'True!'

if not cond2:
    print 'None!'

if cond2 is None:
    print 'None!'

获取字典某个键的值

如果要获取字典某个键的值,但不确定该键是否在字典中,请尽量使用字典的get方法来获取对应的值。

Bad

d = {'zhuan': 'fou'}

if d.has_key('zhuan'):
    print d['zhuan']  # will print 'fou'
else:
    print 'default value'

Good

d = {'zhuan': 'fou'}

print d.get('zhuan', 'default value')  # will print 'fou'
print d.get('key', 'default value')  # will print 'default value'

针对代码风格这件事,这里的观点是“以意为先”,不必太过拘泥于标准;大体上按着这个感觉,做到价值取向上符合即可。(也许会有人不认同这个观点,认为代码风格应该完全符合某个标准;争议是一件很正常的事情,本小节对代码风格的观点仅供参考。)


代码风格

上一节 结束