我在python中寻找整数的最小值和最大值.例如,在Java中,我们有Integer.MIN_VALUE和Integer.MAX_VALUE.在python中有这样的东西吗?
sen*_*rle 748
在Python 3中,这个问题不适用.普通int类型是无限的.
但是,您实际上可能正在寻找机器的字大小.这仍然在Python 3中可用sys.maxsize.
在Python 2中,普通int值的最大值可用sys.maxint:
>>> sys.maxint
9223372036854775807
Run Code Online (Sandbox Code Playgroud)
您可以使用此处-sys.maxint - 1所示计算最小值.
一旦超过此值,Python就会从普通整数切换为长整数.所以大多数时候,你不需要知道它.
Aka*_*ana 204
sys.maxint常量已从Python 3.0开始删除,而是使用sys.maxsize
整型
- PEP 237:基本上,长期重命名为int.也就是说,只有一个内置的整数类型,名为int; 但它的行为大多像旧的长型.
- PEP 238:像1/2这样的表达式返回一个浮点数.使用1 // 2来获取截断行为.(后一种语法已存在多年,至少从Python 2.2开始.)
- 删除了sys.maxint常量,因为不再对整数值进行限制.但是,sys.maxsize可以用作大于任何实际列表或字符串索引的整数.它符合实现的"自然"整数大小,并且通常与同一平台上以前版本中的sys.maxint相同(假设具有相同的构建选项).
- 长整数的repr()不再包含尾随L,因此无条件地剥离该字符的代码将切掉最后一位数字.(改用str().)
- 八进制文字不再是0720的形式; 请改用0o720.
请参阅:https://docs.python.org/3/whatsnew/3.0.html
Mel*_*lle 195
如果你只需要一个比其他数字更大的数字,你可以使用
float('inf')
Run Code Online (Sandbox Code Playgroud)
以类似的方式,比其他所有人都小:
float('-inf')
Run Code Online (Sandbox Code Playgroud)
这适用于python 2和3.
Joh*_*ica 77
在Python中,一旦传递了值,整数将自动从固定大小的int表示切换为可变宽度long表示sys.maxint,取决于您的平台,该值为2 31 - 1或2 63 - 1.注意L这附加了:
>>> 9223372036854775807
9223372036854775807
>>> 9223372036854775808
9223372036854775808L
Run Code Online (Sandbox Code Playgroud)
从Python手册:
数字由数字文字或内置函数和运算符的结果创建.纯文本整数文字(包括二进制,十六进制和八进制数)产生普通整数,除非它们表示的值太大而不能表示为普通整数,在这种情况下它们会产生一个长整数.带有
'L'或'l'后缀的整数文字会产生长整数('L'首选因为1l看起来太像11!).
Python非常努力地假装它的整数是数学整数并且是无界的.例如,它可以轻松地计算一个googol:
>>> 10**100
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L
Run Code Online (Sandbox Code Playgroud)
net*_*ink 27
对于Python 3,它是
import sys
max = sys.maxsize
min = -sys.maxsize -1
Run Code Online (Sandbox Code Playgroud)
Rah*_*bal 25
您可以像这样使用“inf”:
import math
bool_true = 0 < math.inf
bool_false = 0 < -math.inf
Run Code Online (Sandbox Code Playgroud)
参考:math - 数学函数
如果你想要数组或列表索引的最大值(相当于size_t在 C/C++ 中),你可以使用 numpy:
np.iinfo(np.intp).max
Run Code Online (Sandbox Code Playgroud)
这与sys.maxsize但是优点是你不需要 import sys 只是为了这个。
如果您想在机器上使用 max for native int:
np.iinfo(np.intc).max
Run Code Online (Sandbox Code Playgroud)
您可以在doc 中查看其他可用类型。
对于浮点数,您也可以使用sys.float_info.max.
sys.maxsize不是实际支持的最大整数值。您可以将 maxsize 加倍并乘以它本身,它仍然是一个有效且正确的值。
但是,如果您尝试这样做sys.maxsize ** sys.maxsize,它将使您的计算机挂起相当长的时间。正如许多人指出的那样,字节和位大小似乎并不相关,因为它实际上不存在。我猜想当 python 需要更多内存空间时,它只是高兴地扩展它的整数。所以一般来说没有限制。
现在,如果您正在谈论以安全的方式打包或存储整数,以便稍后可以完整地检索它们,那么这当然是相关的。我真的不确定打包的事情,但我知道 python 的pickle模块可以很好地处理这些事情。字符串表示显然没有实际限制。
所以实际上,底线是:您的应用程序限制是什么?数字数据需要什么?使用该限制而不是 python 相当不存在的整数限制。
小智 5
在 64 位系统上的 CPython 3.11 上,最大和最小整数为
2 ** ((2 ** 63 - 1) * 30) - 1
-(2 ** ( 2 ** 63 * 30) - 1)
Run Code Online (Sandbox Code Playgroud)
您将需要40 艾字节内存来创建一个,按照今天(2023 年 7 月)NewEgg 上每 32GB 57 美元的价格计算,这将花费700 亿美元,因此实际上 Python 的最大整数受到计算机内存量的限制。
CPython 3.11像这样存储整数(我通过删除所有宏来简化实际代码):
struct PyLongObject {
Py_ssize_t ob_refcnt; /* Metadata for garbage collection */
PyTypeObject* ob_type; /* Metadata for type() */
Py_ssize_t ob_size; /* Number of items in ob_digit */
uint32_t ob_digit[1]; /* Array of 32-bit integers */
};
Run Code Online (Sandbox Code Playgroud)
因此,在 64 位系统上,Python 整数被实现为存储整数绝对值的 32 位整数数组(但不使用每个整数的 2 位)和 64 位有符号二进制补码整数存储该数组的长度以及 Python 整数的符号,因此负整数具有负“大小”。
| 归档时间: |
|
| 查看次数: |
862954 次 |
| 最近记录: |