使用 [object instance].__self__ 有什么意义?

阿斯德鲁巴利万

在 Python中检查 toolz 库groupby函数的代码,我发现了这个:

def groupby(key, seq):
    """ Group a collection by a key function
    """
    if not callable(key):
        key = getter(key)
    d = collections.defaultdict(lambda: [].append)
    for item in seq:
        d[key(item)](item)
    rv = {}
    for k, v in d.items():
        rv[k] = v.__self__
    return rv

有什么理由使用rv[k] = v.__self__而不是rv[k] = v吗?

巨型化

这是一个有点令人困惑的技巧,可以节省少量时间:

我们正在defaultdict使用工厂函数创建一个,该函数返回append一个新列表实例的绑定方法[].append然后我们可以做d[key(item)](item)而不是d[key(item)].append(item)像我们创建一个defaultdict包含列表的那样。如果我们不append每次都查找,我们会获得少量时间。

但是现在dict包含绑定方法而不是列表,所以我们必须通过__self__.

__self__是为返回原始实例的实例方法描述的属性例如,您可以验证这一点:

>>> a = []
>>> a.append.__self__ is a
True

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章