python - 与它们的等效函数相比,python 类慢了多少?

标签 python performance class

当我开始学习 Python 时,我只使用 函数procedural 代码创建了一些应用程序。但是,现在我知道了,并意识到如果我用类重写代码,代码的可读性会更高(并且主观上更容易理解)。

与一般的函数相比,等效的可能会慢多少?类中的初始化程序和方法会在速度上产生显着差异吗?

最佳答案

回答这个问题:是的,在其他条件相同的情况下,它可能会慢一点。一些以前是变量(包括函数)的东西现在变成了对象属性,而 self.foo 总是会比 foo 慢一点,不管 foo 最初是全局或本地的。 (局部变量按索引访问,全局变量按名称访问,但对象上的属性查找是局部或全局查找,加上额外按名称查找属性,可能在多个位置.) 调用方法也比调用函数稍慢——不仅获取属性更慢,调用也更慢,因为方法是调用您编写的函数的包装对象,添加一个额外的函数调用开销。

这会很明显吗?通常不会。在极少数情况下,例如,如果您在特定方法中大量(数千或数百万次)访问对象属性。但在这种情况下,您只需将 self.foo 分配给方法顶部的局部变量 foo,并在整个过程中通过本地名称引用它,即可重新获得 99.44%局部变量的性能优势。

除此之外,为您以前可能没有的实例分配内存会产生一些开销,但除非您不断创建和销毁实例,否则这可能是一次性成本。

简而言之:可能会受到轻微的性能影响,而如果性能影响非常小,则很容易缓解。另一方面,假设您的问题适合面向对象的解决方案,您可以在编写和维护代码方面节省 小时。节省时间可能是您开始使用 Python 之类的语言的原因。

关于python - 与它们的等效函数相比,python 类慢了多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8492624/

相关文章:

python - Python 中的二维列表?

python - 使用破折号组合两个单独列表中的单独元素

c++ - 动态创建对象指针数组

objective-c - 在 iOS 中以编程方式实例化类

performance - 为什么haskell中两个版本的归并排序有1000倍的性能差异

c++ - 类定义中的 bad_alloc 错误

Python 奇怪的类变量用法

python - 使用表单发布请求,然后能够保存它在单独请求中返回的数据

c++ - 可以强制 GCC 为内存对齐对象生成有效的构造函数吗?

performance - 为什么一个循环迭代中的依赖不能和上一个一起执行