为什么数字在python中表示为对象?

时间:2017-05-24 18:34:22

标签: python object numbers interpreter

每次我在python中执行arthetic操作时,都会创建新的数字对象。对于解释器来说,使用原始数据类型执行算术运算,而不是为算术运算创建对象(甚至是数字)的开销是不是更有效率?  提前谢谢

2 个答案:

答案 0 :(得分:4)

是的,它会的。

就像人为的基准测试或多或少证明你想要他们证明的一样。

当您添加3 + 23431827340987123049712093874192376491287364912873641298374190234691283764时会发生什么?好吧,如果你使用原始类型,你会得到各种各样的溢出。如果你正在使用Python对象,那么它会做一些长数学,是的,比原生数学慢,但它们是大数字,所以你必须要处理它。

答案 1 :(得分:2)

你的权利,当你使用物品时,你的开销很小,这会降低效率。

但数字是不可变的,内存分配针对小数字进行了优化:请参阅文章Python integer objects implementation

使用对象允许开发人员继承数字类intfloatcomplex并添加新的专用方法。

在Python中,还定义了type Hierarchy for Numbers:Number:>复杂:>真实:>理性:>积分。这样,您就可以拥有与Scheme类似的功能。

如果您需要优化,可以使用Cython。它使用C语言执行优化。

另一方面,你也有着名的NumPy用于Python的科学计算。该库也用C编译。

如果你真的想玩原始类型,那么有一个array标准包:高效的数值数组。

作为结论:我们同意Python数字不是原始类型,但使用对象提供了更多的可能性,而没有为开发人员带来复杂性,也没有太多的性能损失。