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



我对传递对象到方法的两种不同方法运行了基准测试,隐式对象传递比显式方法花费的时间更少。我的书上说这是相同的过程。如何解释这种差异呢?

首先,这是类定义:

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)

谁能告诉我在内存分配级别上发生了什么,解释了基准测试的差异?一种方式是否比另一种更像"蟒蛇"?为什么程序员会选择其中一个而不是另一个(除了速度之外)?

谢谢你,迈克尔

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

使用第一个方法使代码更容易理解,如果您想使用第二种风格,您可以将其设置为staticmethod,以表明该方法意味着从class而不是从实例调用(这将是有点糟糕的设计)。

这纯粹是我的经验

最新更新