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'>
int
和long
被“统一” 了几个版本 。 在此之前,有可能通过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理它们,因为int
和long
是兄弟类定义。 他们有+, – ,*,/等适当的方法,将产生适当的类的结果。
例如
>>> 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模块(编译到一个文件)。 代码很好地遵循。