Python中使用[对象实例].__self__的具体作用是什么?
toolz库groupby实现
__self__用法解答 要理解这个写法的原因,顺着实现逻辑梳理就很清楚:
- 首先看
d = collections.defaultdict(lambda: [].append)这一行:它给每个新key生成的默认值不是空列表,而是新创建空列表的append绑定方法,这是性能优化的小技巧,省去后续循环中每次查找append属性的开销 - 遍历序列的时候直接执行
d[key(item)](item),等价于直接调用对应分组列表的append方法插入元素,写法更简洁执行也更快 - 这一步完成后,字典
d里存储的所有值都是各个分组对应的append方法对象,不是我们要返回给用户的分组列表本身 - Python中所有绑定到实例的方法,都自带
__self__属性,指向该方法所属的实例对象。这里v.__self__就对应我们创建的、已经插入了当前分组所有元素的列表实例 - 如果直接写
rv[k] = v,返回结果里的每个分组都是append方法,完全不符合用户预期,只有取__self__属性才能拿到可用的分组列表。
内容的提问来源于stack exchange,提问作者asdrubalivan
相关产品推荐
相关产品推荐

