首页 > 解决方案 > 为什么有时 Python 代码中有 obj_method = obj.method 模式?

问题描述

我想知道使用它的原因是什么以及这种模式何时有帮助。

集合模块中有几个示例。首先在_count_elements

def _count_elements(mapping, iterable):
    'Tally elements from the iterable.'
    mapping_get = mapping.get
    for elem in iterable:
        mapping[elem] = mapping_get(elem, 0) + 1

并在Counter.update

if iterable is not None:
    if isinstance(iterable, _collections_abc.Mapping):
        if self:
            self_get = self.get
            for elem, count in iterable.items():
                self[elem] = count + self_get(elem, 0)

标签: python

解决方案


在这两个示例中,这样做都有性能原因。调用“。” 对象上的运算符需要在对象的属性集中查找属性/方法(例如get在上面的示例中)。通过将方法分配给新变量(例如self_get,您无需在每次迭代中进行此查找。


推荐阅读