我对传递对象到方法的两种不同方法运行了基准测试,隐式对象传递比显式方法花费的时间更少。我的书上说这是相同的过程。如何解释这种差异呢?
首先,这是类定义:
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
而不是从实例调用(这将是有点糟糕的设计)。
这纯粹是我的经验