Python在Windows和Unix上对长整型的处理不同
现在距离1970年1月1日以来的毫秒数是 1395245378429
;在使用64位的Unix系统(比如Ubuntu和Python 2.7)时,你可以这样做:
>>> t = 1395245378429
>>> type(t)
<type 'int'>
>>> t = 1395245378429L
>>> type(t)
<type 'long'>
>>> int(t)
1395245378429
>>> type(int(t)
<type 'int'>
但是在Windows系统(同样是64位,使用Python 2.7)时,会出现这样的情况:
>>> t = 1395245378429
>>> type(t)
<type 'long'>
>>> int(t)
1395245378429L
>>> type(int(t))
<type 'long'>
所以,有一些奇怪的现象:
- 在Windows上,
int(<long>)
返回的是一个长整型 - 同样的数字在Windows上被当作长整型处理,但在Unix上却被当作整型
我在文档中没有看到明显的说明说这是正确的行为;有没有什么(正确的)方法可以把长整型转换成整型(也就是说,这样可以在需要整型参数的方法中使用)
1 个回答
6
Python使用C语言中的long
来表示int
类型,即使在Windows系统上,这个限制也是32位。你可以通过查看sys.maxint
的值来了解你当前平台上支持的最大原生int
大小:
这是Python常规整数类型支持的最大正整数,至少是2的31次方减去1。最大的负整数是
-maxint-1
,这种不对称性是因为使用了二进制的补码运算。
还有来自数字类型部分的信息:
普通整数(也叫整数)在C语言中是通过
long
来实现的,这样它们至少有32位的精度(sys.maxint
总是设置为当前平台的最大普通整数值,最小值是-sys.maxint - 1
)。
除非你直接在使用一个不支持Python long
类型的C扩展库,否则不需要担心Python什么时候使用int
,什么时候需要使用long
。在Python 3中,long
类型已经完全被移除。