int()和long()之间的区别

11

在Python中,int(x)long(x)有什么区别?

我的理解:

  1. long()总是返回一个长整型
  2. int()将返回一个整数或一个长整型(如果它太大)
  3. 因此,int()足以根据其值动态获取一个整数/长整型

所以,除非上述(1)(2)(3)不正确,为什么需要long()?当int()可以胜任时?跳过所有数字范围的long()会伤害我吗?


参考文档:

class int(x=0)

从数字或字符串 x 构造一个整数对象,如果没有给出参数则返回 0。如果 x 是数字,它可以是普通整数、长整数或浮点数。如果 x 是浮点数,则转换会向零截断。如果参数超出整数范围,则函数返回一个长整数对象。

class long(x=0)

从字符串或数字 x 构造一个长整数对象。如果参数是一个字符串,则它必须包含可能带符号的任意大小的数字,可能嵌入在空白中。基数参数的解释方式与 int() 相同,只有当 x 是字符串时才能给出。否则,参数可以是普通整数、长整数或浮点数,将返回具有相同值的长整数。将浮点数转换为整数时截断(向零)。如果没有给出参数,则返回 0L。


代码实验

number = int(number_string) # cast it to integer
print number, "\t", type(number)

number = long(number_string) # cast it to long
print number, "\t", type(number)

1
long 强制结果为长整型(扩展精度),无论大小。因此 int(1)long(1) 不同。在 Python 3 中,这种区别更多是内部的,但在 Python 2 中,当您显示数字时,差异是可见的。 - Tom Karzes
有趣的是,当int值溢出时会自动转换为long... https://pastebin.com/5PeprCEi - Attie
1
请参阅 https://www.python.org/dev/peps/pep-0237/ ,了解一些历史(请注意,那里提出的内容与实际实现的不太相符)。虽然在 Python 2.3 之前选择很重要,但是现在关于 intlong 的区别已经不太需要在意了。 - Mark Dickinson
1
@TomKarzes:在Python 3中,实际上没有任何区别,无论是内部还是其他方面。在Python 3 int实现中没有优化的“短”int类型:一切都是“长”int。 - Mark Dickinson
那么在3+版本中就没有long了吗? - Srinath Ganesh
请查看此链接 https://dev59.com/FXI95IYBdhLWcg3w5SSh#53338502,您将会更好地理解。 - Nader Belal
1个回答

15

int: 整数; 在Python 2.x中相当于C语言的long类型,而在Python 3.x中则没有长度限制。

long: 长整数类型,仅存在于Python 2.x版本中,没有长度限制。

因此,在Python 3.x及以上版本中,您可以使用 int()代替 long()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接