使长整型在Python 2兼容在Python 3
问题描述:
我有这样的代码:使长整型在Python 2兼容在Python 3
max32 = 0xffffffffL
print(sys.getsizeof(max32))
>>32
这是写在Python 2
现在我需要确保这个代码也是在Python 3兼容。 但python3中没有长整数。我怎么做?
答
使用PEP 0237 - long
已更名为int
,只需删除L
并使用它。示例 -
>>> max64 = 0xffffffffffffffff
>>> max64
18446744073709551615
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也不支持,也许有一个类具有这种行为。
可能想要通过这里的答案:http://*.com/questions/2104884/how-does-python-manage-int-and-long,也看看:https://www.python .org/dev/peps/pep-0237/ –
@PrakharMohanSrivastava,我编辑了我的问题。我想要的是确保python 3中的长数字与python 2中的长数字相同。 – city
“我想要的是确保python 3中的长数字与python 2中的长数字相同” - 为什么你是依靠*那* *? – user2357112