在python 3中兼容python 2中的长整数

时间:2015-07-21 05:23:59

标签: python python-3.x

我的代码如下:

max32 = 0xffffffffL
print(sys.getsizeof(max32))
>>32

用python 2编写。

现在我需要确保此代码在python 3中也兼容。 但是python3中没有长整数。我该怎么做?

2 个答案:

答案 0 :(得分:4)

使用PEP 0237 - long已重命名为int,只需删除L即可使用它。示例 -

>>> max64 = 0xffffffffffffffff
>>> max64
18446744073709551615

同样来自Whats new in Python 3.0 -

  

PEP 0237:基本上,长期重命名为int。也就是说,只有一个内置的整数类型,名为int;但它的行为大多像旧的长型。

另外,在Python 3.x中,似乎int具有可变大小,具体取决于存储在其中的整数 -

>>> max64 = 0xffffffffffffffff
>>> sys.getsizeof(max64)
22
>>> max32 = 0xffffffff
>>> sys.getsizeof(max32)
18
>>> max67 = 0xffffffffffffffffffffffffffffff
>>> sys.getsizeof(max67)
28
>>> max100 = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>>> sys.getsizeof(max100)
68

所以你不应该依赖代码中的字节大小。

答案 1 :(得分:0)

python3中的int与python2中的int大多兼容。在这方面,与python2一起使用的代码将在python3中起作用,除了依赖的代码:

  • sys.getsizeof(x)返回相同的结果(无论如何都没有)
  • 包含int s的算术表达式导致相同的类型(如果结果不适合int,结果将在python2中很长)
  • 依赖于long类型存在的代码(您仍然可以定义在python3中执行相同操作的函数long
  • 依赖于L后缀
  • 的代码

......可能还有一些我可能忽略的情况。

基本原理是,只有一个整数类型,你有一个整数类型,就像一个整数一样行为 - 应该有一个这样的类型,或多或少不需要其他整数类型,不表现为整数应该表现(或要求长型补充它们)。例外情况当然是你需要的情况" mod 2 ^ n"行为(比如java整数类型,其中2 * 0x7FFFFFFF可能变为-2),但python2 int无论如何都不支持,也许有一个类来表示这种行为。