Python在Windows和Unix上对长整型的处理不同

4 投票
1 回答
1298 浏览
提问于 2025-04-17 23:00

现在距离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类型已经完全被移除。

撰写回答