当我开始学习 Python 时,我只使用 函数 和 procedural 代码创建了一些应用程序。但是,现在我知道了类,并意识到如果我用类重写代码,代码的可读性会更高(并且主观上更容易理解)。
与一般的函数相比,等效的类可能会慢多少?类中的初始化程序和方法会在速度上产生显着差异吗?
最佳答案
回答这个问题:是的,在其他条件相同的情况下,它可能会慢一点。一些以前是变量(包括函数)的东西现在变成了对象属性,而 self.foo
总是会比 foo
慢一点,不管 foo
最初是全局或本地的。 (局部变量按索引访问,全局变量按名称访问,但对象上的属性查找是局部或全局查找,加上额外按名称查找属性,可能在多个位置.) 调用方法也比调用函数稍慢——不仅获取属性更慢,调用也更慢,因为方法是调用您编写的函数的包装对象,添加一个额外的函数调用开销。
这会很明显吗?通常不会。在极少数情况下,例如,如果您在特定方法中大量(数千或数百万次)访问对象属性。但在这种情况下,您只需将 self.foo
分配给方法顶部的局部变量 foo
,并在整个过程中通过本地名称引用它,即可重新获得 99.44%局部变量的性能优势。
除此之外,为您以前可能没有的实例分配内存会产生一些开销,但除非您不断创建和销毁实例,否则这可能是一次性成本。
简而言之:可能会受到轻微的性能影响,而如果性能影响非常小,则很容易缓解。另一方面,假设您的问题适合面向对象的解决方案,您可以在编写和维护代码方面节省 小时。节省时间可能是您开始使用 Python 之类的语言的原因。
关于python - 与它们的等效函数相比,python 类慢了多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8492624/