Python 3中的sys.maxint是什么?


161

我一直在尝试找出如何表示最大整数,并且已经阅读过使用"sys.maxint"。但是,在Python 3中,当我调用它时,会得到:

AttributeError: module 'object' has no attribute 'maxint'

Answers:



79

正如其他人指出的那样,Python 3 int没有最大大小,但是如果您只需要保证比其他任何int值都高的值,则可以将Infinity的float值使用float("inf")


也适用于旧版Python(2.7)-当您需要返回比所有可能的实际值都高的数字时(例如,通过比较对象进行列表排序),这是正确的答案
Aaron D

3
这种方法的一个缺点是,如果您尝试使用numba或Cython或类似应用程序进行jit编译,则float inf可能会破坏数组的数据类型。例如,您可能需要所有整数类型的Python列表,以便jit编译器可以自动将其转换为适当的c类型。这对于经典算法尤其重要,在经典算法中,您可以应用jit工具使其比纯Python实现快得多,但如果未在已部署的环境中安装jit编译器,则仍希望使用纯Python编写实现以方便,测试和后备等
ely

24

Python 3 int没有最大值。

如果您的目的是在以与Python相同的方式确定C语言中int的最大大小,则可以使用struct模块找出:

>>> import struct
>>> platform_c_maxint = 2 ** (struct.Struct('i').size * 8 - 1) - 1

如果您对Python 3 int对象的内部实现细节感到好奇,请查看sys.int_info每位位数和位数大小的详细信息。没有正常的程序应该关心这些。


18

如果您要查找的数字大于所有其他数字:

方法1:

float('inf')

方法2:

import sys
max = sys.maxsize

如果您要寻找一个小于所有其他数字的数字:

方法1:

float('-inf')

方法2:

import sys
min = -sys.maxsize - 1

方法1在Python2和Python3中均有效。方法2在Python3中有效。我没有在Python2中尝试方法2。


3

由于Python 3的int具有任意长度,因此Python 3.0不再具有sys.maxint。它具有sys.maxsize而不是sys.maxint;正数size_t或Py_ssize_t的最大大小。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.