【问题标题】:What is sys.maxint in Python 3?Python 3 中的 sys.maxint 是什么?
【发布时间】:2012-11-27 13:26:14
【问题描述】:

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

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

【问题讨论】:

标签: python python-3.x


【解决方案1】:

删除了 sys.maxint 常量,因为不再有限制 为整数的值。但是, sys.maxsize 可以用作 大于任何实际列表或字符串索引的整数。它符合 实现的“自然”整数大小,通常是相同的 与同一平台上先前版本中的 sys.maxint 一样(假设 相同的构建选项)。

http://docs.python.org/3.1/whatsnew/3.0.html#integers

【讨论】:

  • "但是,sys.maxsize 可以用作大于任何实际列表或字符串索引的整数"
  • 这一切都很好,直到你需要一个 timedelta(days=x) 并且 x 大于 2^32: 然后你得到 OverflowError: Python int too large to convert to C int。跨度>
【解决方案2】:

正如其他人指出的那样,Python 3 的 int 没有最大大小,但如果您只需要保证高于任何其他 int 值的东西,那么您可以将浮点值用于 Infinity,您可以通过float("inf") 获得。

【讨论】:

  • 也适用于旧版 Python (2.7) - 当您需要返回一个高于所有可能实际值的数字时,这是正确的答案(例如,通过比较对象进行列表排序)
  • 这种方法的一个缺点是,如果您尝试使用 numba 或 Cython 或类似方法应用 jit 编译,float inf 可能会破坏数组的数据类型。例如,您可能需要所有整数类型的 Python 列表,以便 jit 编译器可以自动将其转换为适当的 c 类型。这对于经典算法尤其重要,您可能会应用 jit 工具使它们比纯 Python 实现快得多,但仍希望在纯 Python 中编写实现以方便、测试、如果 jit 编译器未安装在已部署环境中时的回退等。
【解决方案3】:

如果您正在寻找比其他所有数字都大的数字:

方法一:

float('inf')

方法二:

import sys
max = sys.maxsize

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

方法一:

float('-inf')

方法二:

import sys
min = -sys.maxsize - 1

方法 1 适用于 Python2 和 Python3。方法 2 适用于 Python3。 Python2中的方法2我没试过。

【讨论】:

  • 嗨 sys.maxsize 只返回 9223372036854775807 这个,如果你的数字大于它返回 False(即)your_large_no
  • …请使用math.inf-math.inf 而不是解析字符串。
  • 可以使用 math.inf 或 'inf'
【解决方案4】:

Python 3 整数没有最大值。

如果您的目的是确定 C 中 int 的最大大小,当编译方式与 Python 相同时,您可以使用 struct 模块来找出:

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

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

【讨论】:

  • 请注意,python 2 int 是 C long 的等价物,而不是 C int。
【解决方案5】:

Python 3.0 不再有 sys.maxint,因为 Python 3 的 int 是 任意长度。而不是 sys.maxint 它有 sys.maxsize;最大值 正尺寸 size_t aka Py_ssize_t 的大小。

【讨论】:

    【解决方案6】:

    另一种选择是

    import math
    
    ... math.inf ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      • 2019-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 2011-12-18
      相关资源
      最近更新 更多