使长整型在Python 2兼容在Python 3

问题描述:

我有这样的代码:使长整型在Python 2兼容在Python 3

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

这是写在Python 2

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

+0

可能想要通过这里的答案:http://*.com/questions/2104884/how-does-python-manage-int-and-long,也看看:https://www.python .org/dev/peps/pep-0237/ –

+0

@PrakharMohanSrivastava,我编辑了我的问题。我想要的是确保python 3中的长数字与python 2中的长数字相同。 – city

+0

“我想要的是确保python 3中的长数字与python 2中的长数字相同” - 为什么你是依靠*那* *? – user2357112

使用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 

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

python3中的int大部分与python2中的int兼容。与python2代码工作将在python3工作,除了代码这一方面依赖于:

  • sys.getsizeof(X)返回相同的结果(这并不反正)
  • 含算术表达式int小号导致相同类型(如果结果不适合int,结果将会在python2中变长)
  • 依赖存在long类型的代码(您仍然可以定义一个函数long,它可以执行相同的操作在python3中)
  • 依赖于L的代码ix

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

基本原理是,只有一个整数类型,你有一个整数类型,就像一个整数应该表现 - 有一个这样的类型,或多或少不需要其他整型不作为整数应该表现出来(或者需要长类来补充它们)。例外情况当然是你想要“mod 2^n”行为的情况(比如java整型类型,其中2 * 0x7FFFFFFF可能变成-2),反正python2 int s也不支持,也许有一个类具有这种行为。