我在将对象传递给方法的两种不同方法上运行基准测试,并且隐式对象传递花费的时间少于显式方法。我的书说这些是相同的过程。是什么解释了差异?
首先,这是类定义:
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”吗?为什么程序员会选择其中一个(超出速度)?
谢谢,
迈克尔
答案 0 :(得分:0)
我认为第一种方法更具pythonic,因为reset
是对象p
的方法,而不是类Point
的类方法。区别在于,方法reset
属于类Point
,还是属于类Point
的对象?
使用第一种方法可以使代码更容易理解,如果你想做第二种风格,你可以使它成为staticmethod
,以表明该方法是从{{1}调用的。而不是来自一个实例(设计稍差)。
这完全取决于我的经验。