Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使python 2中的长整数与python 3兼容_Python_Python 3.x - Fatal编程技术网

使python 2中的长整数与python 3兼容

使python 2中的长整数与python 3兼容,python,python-3.x,Python,Python 3.x,我的代码如下: max32 = 0xffffffffL print(sys.getsizeof(max32)) >>32 这是用python 2编写的 现在我需要确保这段代码在Python3中也兼容。 但是python3中没有长整数。如何操作?使用-long已重命名为int,只需删除L并使用它即可。范例- >>> max64 = 0xffffffffffffffff >>> max64 18446744073709551615 也来自- PEP

我的代码如下:

max32 = 0xffffffffL
print(sys.getsizeof(max32))
>>32
这是用python 2编写的

现在我需要确保这段代码在Python3中也兼容。 但是python3中没有长整数。如何操作?

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

>>> max64 = 0xffffffffffffffff
>>> max64
18446744073709551615
也来自-

PEP 0237:本质上,long重命名为int。也就是说,只有一个内置的整型,名为int;但它的行为大部分类似于旧的long类型

此外,在Python3.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
因此,您不应该依赖代码中字节的大小。

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

>>> max64 = 0xffffffffffffffff
>>> max64
18446744073709551615
也来自-

PEP 0237:本质上,long重命名为int。也就是说,只有一个内置的整型,名为int;但它的行为大部分类似于旧的long类型

此外,在Python3.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
    s的算术表达式(如果结果不适合int,则结果将在python2中变长)
  • 依赖于
    long
    类型存在的代码(您仍然可以定义一个函数
    long
    ,该函数在python3中执行相同的操作)
  • 依赖于
    L
    后缀的代码
…可能还有更多我可能忽略的情况


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

python3中的
int
与python2中的
int
基本兼容。在这方面,与python2一起工作的代码将与python3一起工作,但依赖于以下内容的代码除外:

  • sys.getsizeof(x)返回相同的结果(无论如何它都不会返回)
  • 包含导致相同类型的
    int
    s的算术表达式(如果结果不适合int,则结果将在python2中变长)
  • 依赖于
    long
    类型存在的代码(您仍然可以定义一个函数
    long
    ,该函数在python3中执行相同的操作)
  • 依赖于
    L
    后缀的代码
…可能还有更多我可能忽略的情况


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

可能需要仔细阅读这里给出的答案:还可以查看:@prakhamohansrivastava,我编辑了我的问题。我想要的是确保Python3中的长数字也与Python2中的长数字大小相同。“我想要的是确保Python3中的长数字也与Python2中的长数字大小相同”-你为什么依赖它?你根本不能。在my python 2上,您可以从上面的代码片段中得到答案
36
——如果您不能假设python 2的不同实现的大小是相同的,为什么您认为可以依赖它在python 3上保持相同?@skyking,原来我问了一个愚蠢的问题..可能想看看这里的答案:@PrakharMohanSrivastava,我编辑了我的问题。我想要的是确保Python3中的长数字也与Python2中的长数字大小相同。“我想要的是确保Python3中的长数字也与Python2中的长数字大小相同”-你为什么依赖它?你根本不能。在我的Python2上,您可以从上面的代码片段中得到答案
36
——如果您不能假设Python2的不同实现的大小是相同的,那么为什么您认为可以依赖它在Python3上保持相同呢?@skyking,原来我问了一个愚蠢的问题。。