为什么这个函数返回的是长整型而不是整型?

1 投票
2 回答
1659 浏览
提问于 2025-04-18 16:51

我定义了一个函数,这个函数接收一个正整数作为输入,然后返回这个数字的各个数字加起来的和:

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是如何管理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'>

撰写回答