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的代码
-
避免只用大小写区分对象,如apple和Apple意思不够直观
-
避免使用容易混淆的名称
-
不要害怕变量过长,比如id_name_score 不要写成ins
建议3 理解python与c语言的不同之处
-
python使用“缩进”,而c,c++, java使用{}
-
python中‘’ 与“”没有明显区别
-
三元操作符(不了解的看这里)
-
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 在代码中添加注释
-
注释的重要性就不多说了
-
注释与代码要隔开一定的距离
-
块注释后要留几行空白
建议5 适当添加空行使布局更优雅
-
一个完整的思路写完可以隔出空白行
-
避免代码行多长(不要超过100字)
-
空白可以作强调使用,如 ==, !=,以及负号(-1)
建议6 编写函数的4个原则
-
函数设计尽量短小,嵌套不宜过长
-
函数申明需要合理,简单易用
-
函数参数设计应考虑向下兼容,如使用默认参数
-
一个函数只做一件事
建议7 将常量集中要一个文件
-
常量名所有字母大写
-
自定义类实现常量功能(个人觉得用不太到)
建议8 利用assert语句发现问题
-
实例:x = 1, y = 2
assert x == y , "not equal"
会报出“AssertionError”,后面的error message也会显示出来 -
不要乱用assert,能用异常处理就用异常
-
不要使用assert检查用户输入
-
assert多用于检查函数的返回值是否合理
建议9 数据交换值时不推荐使用中间变量
- 开头也有提到过,加入要交换x,y的值,其他语言可能会这样做
temp = x
x = y
y = temp
在python中,一步解决
x, y = y, x
建议10 充分利用Lazy evaluation特征
-
避免不必要的计算,带来性能的提升
例如:if x and y 加入x是false则不必再计算y -
节省空间,使无限循环的数据成为可能
例如:使用yield,关于yield的使用看这里
今天就分享到这里,明天继续!(有问题可以在下方评论留言)