python在Windows和Unix上处理不同的长整数

时间:2014-03-19 17:19:18

标签: python

自纪元以来的当前毫秒数1395245378429;在unix(64位/ 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中将相同的数字视为long,但在unix上视为int

我无法在文档中看到任何明显的信息,说这是正确的行为;有没有(正确的)方法将long转换为int(即所以它可以在需要int参数的方法中使用)

1 个答案:

答案 0 :(得分:5)

Python使用C long作为int类型,甚至在Windows上也限制为32位。您可以通过查看sys.maxint value来查看您平台当前的最大原始int尺寸:

  

Python常规整数类型支持的最大正整数。这至少是2 ** 31-1。最大的负整数是-maxint-1 - 使用2的补码二进制算法产生不对称性。

来自Numeric Types section

  

普通整数(也称为整数)是使用C中的long实现的,它给出了至少32位的精度(sys.maxint总是设置为当前平台的最大纯整数值,最小值为-sys.maxint - 1)。

除非您直接与不支持Python long类型的C扩展库进行交互,否则无需担心Python何时使用int以及何时需要使用long。在Python 3中,单独的long类型已被完全删除。