为什么这个函数返回的是长整型而不是整型?
我定义了一个函数,这个函数接收一个正整数作为输入,然后返回这个数字的各个数字加起来的和:
def digitSum(n):
exp = 0
digitSum = 0
while n%(10**exp) != n:
digitSum += (n%(10**(exp+1))-n%(10**(exp)))/(10**exp)
exp += 1
return digitSum
看起来如果这个数字 n 小于 10 的 9 次方(也就是 10 亿),那么 digitSum 会返回一个整数;如果 n 大于等于 10 亿,它就会返回一个长整型(long)。如果我想让它总是返回一个整数,我可以让它返回 int(digitSum),而不是直接返回 digitSum,这样就没问题了。我的问题是,为什么一开始它会返回一个长整型呢?
2 个回答
0
在Python 2中,整数分为两种:一种是可以直接存储在机器的基本类型int
里的整数,另一种是可以存放任意大小的整数,称为long
。如果你想让你的函数返回一个int
,其实是做不到的(除非你想引发溢出错误),因为当数值太大,无法放入int
时,Python 2会自动创建一个long
对象。
而在Python 3中,这种区分就被去掉了:所有的数值都是int
,无论它们有多大,任何更细的区分都是int
类型内部的实现细节。
4
在Python中,如果一个整数(int
)的值变得太大,它会自动转换成一个更大的整数类型(long
)。
你可以在这里了解更多信息。
(这种自动转换是Python在内存使用上比C/C++更占用空间和速度更慢的原因之一,但这又是另一个话题)
>>> import sys
>>> x = sys.maxint # set a variable to your systems maximum integer
>>> print type(x)
<type 'int'> # type is then set to int
>>> x += 1 # if you increase it, it gets converted into long
>>> print type(x)
<type 'long'>