Python如何pipe理int和long?

有人知道Python如何pipe理int和longtypes吗?

  • 它是否dynamicselect正确的types?
  • 什么是int的限制?
  • 我正在使用Python 2.6,与以前的版本是不同的?

我应该如何理解下面的代码?

>>> print type(65535) <type 'int'> >>> print type(65536*65536) <type 'long'> 

更新:

 >>> print type(0x7fffffff) <type 'int'> >>> print type(0x80000000) <type 'long'> 

intlong被“统一” 了几个版本 。 在此之前,有可能通过math运算来溢出int。

3.x通过完全消除int并进一步提高了这一点。

Python 2: sys.maxint包含Python int可以容纳的最大值。

Python 3: sys.maxsize包含Python int可容纳的最大值。

这个PEP应该有所帮助。

底线是,你真的不应该担心在Python版本> 2.4

在我的机器上:

 >>> print type(1<<30) <type 'int'> >>> print type(1<<31) <type 'long'> >>> print type(0x7FFFFFFF) <type 'int'> >>> print type(0x7FFFFFFF+1) <type 'long'> 

Python使用整数(32位有符号整数,我不知道它们是否是C中的整数)适合于32位的值,但是自动切换为长整型(任意数量的位,即双色)大。 我猜这是为了减less值的速度,同时避免任何溢出与无缝过渡到bignums。

有趣。 在我的64位(i7的Ubuntu)框:

 >>> print type(0x7FFFFFFF) <type 'int'> >>> print type(0x7FFFFFFF+1) <type 'int'> 

猜测它在一台较大的机器上升级到64位整数。

Python 2.7.9自动提升数字。 对于不确定使用int()或long()的情况。

 >>> a = int("123") >>> type(a) <type 'int'> >>> a = int("111111111111111111111111111111111111111111111111111") >>> type(a) <type 'long'> 

它pipe理它们,因为intlong是兄弟类定义。 他们有+, – ,*,/等适当的方法,将产生适当的类的结果。

例如

 >>> a=1<<30 >>> type(a) <type 'int'> >>> b=a*2 >>> type(b) <type 'long'> 

在这种情况下,类int有一个__mul__方法(实现*的方法),它在需要时创build一个long结果。

从python 3.x开始,统一的整数libries比旧版本更加智能。 在我的(i7的Ubuntu)框中,我得到了以下,

 >>> type(math.factorial(30)) <class 'int'> 

有关实现细节,请参阅Include/longintrepr.h, Objects/longobject.c and Modules/mathmodule.c文件。 最后一个文件是一个dynamic模块(编译到一个文件)。 代码很好地遵循。