10天读完《编写高质量代码 改善Python编程的91个建议》——Day1

计划

Hello,这是一个读书摘要的计划,10天读完《编写高质量代码 改善Python编程的91个建议》,我会每天摘录大概9个书中提到的建议,分享在这里,也作为自己的打卡任务。关于这本书,他并不是python入门的教学书籍,而是一本用来改善编程习惯和风格的书,可以帮助我们写出漂亮的,也就是符合pythonic的python代码。书中的知识难度不会很大,每天看几条,然后落实到实际编程中加以巩固,就能融会贯通,久而久之也就能养成好的编程习惯。如果你没有时间看原书,那么直接看我的摘要就好啦,遇到感兴趣的再去详细了解也会方便很多,当然这里摘要的内容是我觉得有用的部分啦。注意,一定要会运用!

书摘

建议1 理解Pythonic概念

其实这个Pythonic的概念是没有具体定义的,就跟“语感”是一回事,悟性高的懂的很快,悟性稍差的多加练习也能跟上。下面跟着几个例子来感受一下python的艺术:

1. 用python写快排有多方便

def quicksort(array):
    less = [];    greater = []
    if len(array) <= 1:
        return array
    pivot = array.pop()
    for x in array:
        if x <= pivot:    less.append(x)
        else:    greater.append(x)
    return quicksort(less) + [pivot] + quicksort(greater)

2. 交换变量值,不再需要temp中间量

a,b = b,a

3. 迭代器generator

例如list,set,with open('file','r') as f 等等

4. python中的reversed函数

a = [1,2,3,4]
rev_a = reversed(a)
# a[::-1]

5. .format比%更好用

建议2 编写pythonic的代码

  1. 避免只用大小写区分对象,如apple和Apple意思不够直观

  2. 避免使用容易混淆的名称

  3. 不要害怕变量过长,比如id_name_score 不要写成ins

建议3 理解python与c语言的不同之处

  1. python使用“缩进”,而c,c++, java使用{}

  2. python中‘’ 与“”没有明显区别

  3. 三元操作符(不了解的看这里

  4. switch ... case ... 的区别,例如

C语言中:

if n == 0:
    print "this is 0"
elif n == 1:
    print "this is 1"
elif n == 2:
    print "this is 2"
else:
    print "nothing"

而在python中,可以这样写:

def fn(x):
    return {
        0: "this is 0",
        1: "this is 1",
        2: "this is 2",
    }.get(n, "nothing")

建议4 在代码中添加注释

  1. 注释的重要性就不多说了

  2. 注释与代码要隔开一定的距离

  3. 块注释后要留几行空白

建议5 适当添加空行使布局更优雅

  1. 一个完整的思路写完可以隔出空白行

  2. 避免代码行多长(不要超过100字)

  3. 空白可以作强调使用,如 ==, !=,以及负号(-1)

建议6 编写函数的4个原则

  1. 函数设计尽量短小,嵌套不宜过长

  2. 函数申明需要合理,简单易用

  3. 函数参数设计应考虑向下兼容,如使用默认参数

  4. 一个函数只做一件事

建议7 将常量集中要一个文件

  1. 常量名所有字母大写

  2. 自定义类实现常量功能(个人觉得用不太到)

建议8 利用assert语句发现问题

  1. 实例:x = 1, y = 2
    assert x == y , "not equal"
    会报出“AssertionError”,后面的error message也会显示出来

  2. 不要乱用assert,能用异常处理就用异常

  3. 不要使用assert检查用户输入

  4. assert多用于检查函数的返回值是否合理

建议9 数据交换值时不推荐使用中间变量

  1. 开头也有提到过,加入要交换x,y的值,其他语言可能会这样做
temp = x
x = y
y = temp

在python中,一步解决

x, y = y, x

建议10 充分利用Lazy evaluation特征

  1. 避免不必要的计算,带来性能的提升
    例如:if x and y 加入x是false则不必再计算y

  2. 节省空间,使无限循环的数据成为可能
    例如:使用yield,关于yield的使用看这里

今天就分享到这里,明天继续!(有问题可以在下方评论留言)

posted @ 2020-01-11 16:27  MrDoghead  阅读(188)  评论(0编辑  收藏  举报