Python 数字封装?
考虑这段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
,也就是“无穷大”的意思。所以,只有在a
和b
都是整数的情况下,如果你的电脑内存不够,才会出现问题。
9
这要看你用的是哪个版本的Python。
在2.2版本之前,如果数字太大,你可能会遇到一个叫OverflowError
的错误。
在2.2到2.7版本之间,如果数字太大,Python会自动把它变成一个long
类型(可以表示任意大小的数字)。
而从3.0版本开始,Python只有一种整数类型,这种类型也可以表示任意大小的数字。