隐式vs显式对象 - 方法内存基准差异

时间:2013-03-28 00:57:17

标签: python oop memory timeit

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

首先,这是类定义:

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)

有人能告诉我在内存分配级别上发生了什么,这解释了基准测试的差异吗?一种方式比另一种方式更“py”吗?为什么程序员会选择其中一个(超出速度)?

谢谢,

迈克尔

1 个答案:

答案 0 :(得分:0)

我认为第一种方法更具pythonic,因为reset是对象p的方法,而不是类Point的类方法。区别在于,方法reset属于类Point,还是属于类Point的对象?

使用第一种方法可以使代码更容易理解,如果你想做第二种风格,你可以使它成为staticmethod,以表明该方法是从{{1}调用的。而不是来自一个实例(设计稍差)。

这完全取决于我的经验。