Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么数字在python中表示为对象?_Python_Object_Numbers_Interpreter - Fatal编程技术网

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

为什么数字在python中表示为对象?,python,object,numbers,interpreter,Python,Object,Numbers,Interpreter,每次我在python中执行arthetic操作时,都会创建新的number对象。对于解释器来说,使用基本数据类型执行算术运算,而不是为算术运算创建对象(甚至是数字)的开销,不是更有效吗? 提前谢谢你是的,会的 就像人为的基准测试或多或少地证明了你想要他们证明的东西一样 添加3+23431827340987123049712093874192376491287364912873646412983741902346921283764时会发生什么情况?如果你使用的是基元类型,你会得到各种各样的溢出。如

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

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


添加3+23431827340987123049712093874192376491287364912873646412983741902346921283764时会发生什么情况?如果你使用的是基元类型,你会得到各种各样的溢出。如果你在使用Python对象,那么它会做一些冗长的数学运算,是的,这比本机数学运算慢,但它们是大数字,所以你必须处理这些问题。

你的权利是,当你使用对象时,你会有一小部分开销,这会降低效率

但是数字是不可变的,内存分配针对小数字进行了优化:参见本文

使用对象允许开发人员继承数字类
int
float
complex
,并添加新的专用方法

在Python中,还定义了:Number:>Complex:>Real:>Rational:>Integral。这样,您就可以拥有与Scheme类似的功能

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

另一方面,您还可以使用Python进行科学计算。这个库也是用C语言编译的

如果您真的想使用基本类型,有一个标准包:高效的数值数组


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

添加非对象数据类型将使语言语义和实现更加复杂和尴尬。如果高效的数值计算是您的瓶颈,请使用NumPy和/或Cython或相关工具。@user2357112建议您选择正确的方法,但如果您想恢复数据类型,请使用python2.7而不是3.x。因为所有数据类型都被视为数据结构,python3Integer中的类和对象可以具有任何精度。它不仅仅是一个
int32
…@Gahan:不管你想说什么,它听起来不像是Python 3的变化。“每次我在Python中执行arthetic操作时,都会创建新的数字对象。”。你用的是什么发行版?在CPython中,小整数在进程的整个生命周期中都保持在相同的内存地址中。尽管…速度并没有明显减慢。