Python 数字封装?

6 投票
4 回答
4834 浏览
提问于 2025-04-16 04:34

考虑这段Python代码:

assert(a > 0)
assert(b > 0)
assert(a + b > 0)

第三个断言会不会出错呢?在C/C++中,如果数字相加超过了最大的整数值,就会出错。那么在Python中,这种情况是怎么处理的呢?

4 个回答

1

如果 a + b 的结果超过了最大的整数值,那么结果会变成一个长整型(long):

>>> import sys
>>> sys.maxint
9223372036854775807
>>> a = sys.maxint
>>> b = 1
>>> a + b
9223372036854775808L # A long
>>> assert a > 0
>>> assert b > 0
>>> assert a + b > 0
3

在Python中,整数会自动变得非常大,几乎没有限制。如果一个浮点数变得太大,它就会变成inf,也就是“无穷大”的意思。所以,只有在ab都是整数的情况下,如果你的电脑内存不够,才会出现问题。

9

这要看你用的是哪个版本的Python。

在2.2版本之前,如果数字太大,你可能会遇到一个叫OverflowError的错误。

在2.2到2.7版本之间,如果数字太大,Python会自动把它变成一个long类型(可以表示任意大小的数字)。

而从3.0版本开始,Python只有一种整数类型,这种类型也可以表示任意大小的数字。

撰写回答