10天读完《编写高质量代码 改善Python编程的91个建议》——Day6
计划
Hello,这是一个读书摘要的计划,10天读完《编写高质量代码 改善Python编程的91个建议》,我会每天摘录大概9个书中提到的建议,分享在这里,也作为自己的打卡任务。关于这本书,他并不是python入门的教学书籍,而是一本用来改善编程习惯和风格的书,可以帮助我们写出漂亮的,也就是符合pythonic的python代码。书中的知识难度不会很大,每天看几条,然后落实到实际编程中加以巩固,就能融会贯通,久而久之也就能养成好的编程习惯。如果你没有时间看原书,那么直接看我的摘要就好啦,遇到感兴趣的再去详细了解也会方便很多,当然这里摘要的内容是我觉得有用的部分啦。注意,一定要会运用!
书摘
建议47 日志级别
DEBUG:详细信息,在追踪问题的时候使用
INFO:正常的信息
WARNING:一些不可预见的问题发生,或者将要发生,如磁盘空间低等,但不影响程序运行
ERROR:由于某些严重的问题,程序中的一些功能收到影响
CRITICAL:严重的错误,或者程序本身不能够继续运行
设置方法:Logger.setlevel(lv1)
使用tips:
-
尽量为logging取个名字,为方便查找问题,名字建议用模块或者class来命名('.'划分)
-
logging只是线程安全,不支持多进程写入同一个日志文件
建议48 使用threading模块编写多线程程序
-
thread与threading区别(前者是底层支持,后者包含了前者)
-
threading具体使用详见博文。
建议49 使用Queue 使多线程编程更加安全
- 详见博文。
建议50 利用模块实现单例模式
-
单例模式可以保证系统中一个类只有一个实例而且该实例易于被外界访问,从而方便控制实例个数并节约系统资源。
-
Sun 这里不再开展。
建议51 用mixin模式让程序更加灵活
模块方法模式就是先在一个方法中定义一个算法的骨架,然后在子类中实现具体步骤。混入mixin方法可以方便对基类的管理,具体不再展开。
建议52 用发布订阅模式实现松耦合
发布订阅模式是一种编程模式,消息的发送者不会发送其消息给特定的接收者(订阅者),而是将发布的消息分为不同的类别直接发布,并不关注订阅者是谁。而订阅者可以对一个或多个类别感兴趣,且只接收感兴趣的消息,并且不关注是哪个发布者发布的消息。既然双方并不需要知道对方的存在,要实现这个模式就需要一个中间代理人,如Broker,blinker,python-message。
建议53 用状态模式美化代码
所谓状态模式,就是当一个对象的内在状态改变时允许改变其行为,但这个对象看起来像是改变了其类。下面展示一个例子:
def workday():
print('work hard')
def weekend():
print('have fun')
class People(object): pass
people = People
while True:
for i in range(1,8):
if i == 6:
people.day = weekend
if i == 1:
people.day = workday
people.day()
建议54 理解built-in objects
在python中一切皆对象的理念,object是所有内建类型的基类。讨论古典类、新式类区别与联系,不再展开。
建议55 init()不是构造方法
init()并不是真正意义上的构造方法,他是在类的对象创建好之后进行变量的初始化,new()方法才会真正创建实例,是类的构造方法。两者都是object类中的默认方法。