每次我在python中执行arthetic操作时,都会创建新的数字对象。对于解释器来说,使用原始数据类型执行算术运算,而不是为算术运算创建对象(甚至是数字)的开销是不是更有效率? 提前谢谢
答案 0 :(得分:4)
是的,它会的。
就像人为的基准测试或多或少证明你想要他们证明的一样。
当您添加3 + 23431827340987123049712093874192376491287364912873641298374190234691283764时会发生什么?好吧,如果你使用原始类型,你会得到各种各样的溢出。如果你正在使用Python对象,那么它会做一些长数学,是的,比原生数学慢,但它们是大数字,所以你必须要处理它。
答案 1 :(得分:2)
你的权利,当你使用物品时,你的开销很小,这会降低效率。
但数字是不可变的,内存分配针对小数字进行了优化:请参阅文章Python integer objects implementation。
使用对象允许开发人员继承数字类int
,float
,complex
并添加新的专用方法。
在Python中,还定义了type Hierarchy for Numbers:Number:>复杂:>真实:>理性:>积分。这样,您就可以拥有与Scheme类似的功能。
如果您需要优化,可以使用Cython。它使用C语言执行优化。
另一方面,你也有着名的NumPy用于Python的科学计算。该库也用C编译。
如果你真的想玩原始类型,那么有一个array
标准包:高效的数值数组。
作为结论:我们同意Python数字不是原始类型,但使用对象提供了更多的可能性,而没有为开发人员带来复杂性,也没有太多的性能损失。