1

我对将对象传递给方法的两种不同方法进行了基准测试,隐式对象传递比显式方法花费的时间更少。我的书说这些是相同的过程。什么解释了差异?

首先,这是类定义:

class Point:
    def reset(self)
        self.x = 0
        self.y = 0

因此,当我在以下两组代码中的每一个上运行“timeit”时,第一个每个循环返回 317 ns,第二个每个循环返回 400 ns。这是隐式的对象方法传递代码,其中 Python 将对象传递给幕后的方法:

p = Point()
p.reset()

这是明确的替代方案:

p = Point()
Point.reset(p)

有人可以告诉我解释基准差异的内存分配级别发生了什么吗?一种方式比另一种方式更“pythonic”吗?为什么程序员会选择一个而不是另一个(超出速度)?

谢谢,

迈克尔

4

1 回答 1

0

我相信第一种方法更 Pythonic,因为reset它是 object 的方法p,而不是 class 的 classmethod Point。区别基本上是,方法是reset属于类Point还是属于类的对象Point

使用第一种方法使代码更易于理解,如果您想使用第二种样式,您可以将其设为 astaticmethod以表明该方法是从实例调用的,class而不是从实例调用的(这有点糟糕的设计)。

这纯粹是根据我的经验。

于 2013-03-28T01:05:44.017 回答