随笔分类 -  源码阅读

摘要:事件类型标志的选择 在selectors模块中的开头直接定义了事件类型的标志数字,选用的是(1 << 0)就是1代替EVENT_READ读操作;使用(1 << 1)就是2代替EVENT_READ写操作,这样做的好处是能够交叉,使用一个数字代表两种模式,就像re模块中进行正则匹配的时候不同模式的组合一 阅读全文
posted @ 2019-11-20 16:17 段明 阅读(199) 评论(0) 推荐(0)
摘要:10 def __init__(self, interval, function, args=None, kwargs=None): # 初始化的时候传参是延迟时间、调用的函数,函数的可变位置参数、函数的可变关键字参数 11 Thread.__init__(self) # 调用Thread类初始化配置实例 12 self.interval = interval # 在使用Thread类初始化配置实例之后再额外的增加interval属性 13 self.function = function # 同理再额外的增加function属性 14 self.args = args if args is not None else [] # 如果args不是空的话就使用args,如果是空就给一个空list 15 self.kwargs = kwargs if kwargs is not None else {} # 同理,kwargs不是空的就是kwargs,如果是空就给一个空字典 阅读全文
posted @ 2019-11-10 16:28 段明 阅读(1145) 评论(0) 推荐(0)
摘要:本段源码可以学习的地方: 1. 考虑到效率问题,可以通过上下文的机制,在属性被访问的时候临时构建; 2. 可以重写一些魔术方法,比如 __new__ 方法,在调用 object.__new__(cls) 前后进行属性的一些小设置; 3. 在本库中使用的重写魔术方法,上下文这两种基础之上,我们可以想到函数装饰器,类装饰器,异常捕获,以及两种上下文的结构; 灵活运用这些手法,可以让我们在代码架构上更上一层,能够更加省时省力。 阅读全文
posted @ 2019-11-10 11:34 段明 阅读(443) 评论(0) 推荐(0)