我在 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] 删除。
我来说两句