如何在Python中表示整数的最小值和最大值?在Java中,我们有Integer.MIN_VALUE和Integer.MAX_VALUE。
Integer.MIN_VALUE
Integer.MAX_VALUE
在Python 3中,这个问题不适用。纯int类型未绑定。
int
但是,您实际上可能正在查找有关当前解释器字长的信息,在大多数情况下,它将与机器的字大小相同。该信息在Python 3中仍然作为sys.maxsize可用,这是有符号字可表示的最大值。等效地,它是最大可能列表或内存序列的大小。
sys.maxsize
通常,无符号字可表示的最大值将是sys.maxsize * 2 + 1,字中的位数将是math.log2(sys.maxsize * 2 + 2)。有关更多信息,请参阅这个答案。
sys.maxsize * 2 + 1
math.log2(sys.maxsize * 2 + 2)
在Python 2中,普通int值的最大值可用作sys.maxint:
sys.maxint
>>> sys.maxint9223372036854775807
您可以使用-sys.maxint - 1计算最小值,如这里所示。
-sys.maxint - 1
一旦你超过这个值,Python就会无缝地从普通整数切换到长整数。所以大多数时候,你不需要知道它。
在Python中,一旦您传递值#2,整数将自动从固定大小的int表示切换到可变宽度的#1表示,根据您的平台,该值是231-1或263-1。请注意此处附加的L:
L
>>> 92233720368547758079223372036854775807>>> 92233720368547758089223372036854775808L
从python手册:
数字由数字文字或内置函数和运算符的结果创建。未修饰的整数文字(包括二进制、十六进制和八进制数字)产生纯整数,除非它们表示的值太大而无法表示为纯整数,在这种情况下它们产生长整数。带有'L'或'l'后缀的整数文字产生长整数(首选'L',因为1l看起来太像11了!)。
'L'
'l'
1l
Python非常努力地假装它的整数是数学整数并且是无界的。例如,它可以轻松计算googol:
>>> 10**10010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L
#0常量已从Python 3.0开始删除,而是使用#1。
整数 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#integers
如果你只需要一个比其他所有数字都大的数字,你可以使用
float('inf')
以类似的方式,比其他所有数都小的数:
float('-inf')
这适用于python 2和3。
对于Python 3,它是
import sysmax_size = sys.maxsizemin_size = -sys.maxsize - 1
我非常依赖这样的命令。
python -c 'import sys; print(sys.maxsize)'
返回的最大值:9223372036854775807
有关'sys'的更多参考,您应该访问
https://docs.python.org/3/library/sys.html
https://docs.python.org/3/library/sys.html#sys.maxsize
如果你想要数组或列表索引的最大值(相当于C/C++中的size_t),你可以使用numpy:
size_t
np.iinfo(np.intp).max
这与sys.maxsize相同,但优点是您不需要为此导入系统。
如果您希望在机器上使用max作为本地int:
np.iinfo(np.intc).max
您可以在doc中查看其他可用类型。
对于浮点数,您也可以使用sys.float_info.max。
sys.float_info.max
你可以这样使用'inf':
import mathbool_true = 0 < math.infbool_false = 0 < -math.inf
参考:数学-数学函数
sys.maxsize实际上不是支持的最大整数值。您可以将maxsize翻倍并将其自身相乘,它保持有效和正确的值。
然而,如果你尝试sys.maxsize ** sys.maxsize,它会挂起你的机器很长一段时间。正如许多人指出的那样,字节和位大小似乎并不相关,因为它实际上不存在。我猜python在需要更多内存空间时只是高兴地扩展它的整数。所以一般来说没有限制。
sys.maxsize ** sys.maxsize
现在,如果你谈论的是以安全的方式打包或存储整数,以便以后可以完整地检索它们,那么这当然是相关的。我真的不确定打包,但我知道python的pickle模块可以很好地处理这些事情。字符串表示显然没有实际限制。
pickle
所以实际上,底线是:你的应用程序限制是什么?它对数字数据需要什么?使用该限制而不是python相当不存在的整数限制。