Python 如何知道使用哪种数字类型来将任意两个数字相乘?

How does Python know which number type to use in order to Multiply arbitrary two numbers?

C 中,我必须设置适当的类型,例如 intfloatlong 用于简单的乘法运算两个数字。否则,它会给我一个错误的答案。

但是在Python,基本上它能自动给我正确答案

我已经尝试调试一个简单的 987*456 计算以查看源代码。

我在PyCharm的那一行设置了一个断点,但是我无法进入源代码,它马上就结束了。

如何查看源代码?可能吗?或者 Python 是如何进行乘法运算的?

我的意思是,Python如何在结果中进行数字类型的不同 98*76987654321*123457789,Python 是否检测到一些超出范围的错误并尝试其他数字类型?

混合算术的类型提升是:

integer -> long -> float

较窄的类型转换为较宽的类型,并进行乘法

https://docs.python.org/2/library/stdtypes.html#numeric-types-int-float-long-complex

一些例子来看看会发生什么:

987*456 = 450072
987*456L = 450072L
987*456.0 = 450072.0

希望我理解了你的问题。

变量不过是为存储值而保留的内存位置。这意味着当您创建一个变量时,您会在内存中保留一些 space。

根据变量的数据类型,解释器分配内存并决定保留内存中可以存储什么。因此,通过为变量分配不同的数据类型,可以在这些变量中存储整数、小数或字符。

Python 变量不必显式声明以保留内存 space。当您为变量赋值时,声明会自动发生。等号 (=) 用于为变量赋值。

=运算符左边的操作数是变量的名称,=运算符右边的操作数是存储在变量中的值。

I mean, how does Python carry out the different of number type in the result of 98*76 or 987654321*123457789, does Python detect some out of range error and try another number type?

差不多。整数乘法的源代码可以在intobject.c中找到。它将整数乘以 C longs,然后将 longs 转换为 double 并相乘。如果结果接近,则长乘法不会溢出。如果结果非常不同,它会切换到 Python 多头,它使用 bignum 表示。