为什么 int() 的基值限制在 36 到 2 之间

Why is the base value for int() limited to between 36 and 2

我发现当我 运行 在 python

中出现以下表达式时
int(33, base=100)

我收到以下错误:

ValueError: int() base must be >= 2 and <= 36, or 0

我找不到这个限制的任何解释; another Stack Overflow question about the same error message 没有提到为什么 base 参数被限制在这个范围内。

intbase 参数用于解析字符串,而不是在将 int 传递给 int 时使用:

>>> int('ff', 16)
255

使用 a、b、c、...、z 表示 10、11、12、...、35 的数字是一个公认的约定,但是对于数字使用什么符号没有约定36 以 37 为基数。

这是一个实用的实现约定。您认为以 100 为基数的字符集是什么? :-)

使用数字和整个字母表已经很常见了,因此 base 具有一组连续的可接受基值的函数实现了到目前为止的功能。基数 1 就是 len(arg).

base-64 编码也有约定;但是,由于没有对值 37-63 的约定,base 函数将 radix-64 值留给了单独的接口。

首先:在将字符串转为数字时,只能指定int()的基数。假设您有一个带有 十六进制 数字的字符串,因此基数为 16:

>>> int('2a', 16)
42

此结果与解释为不同基数的相同字符串有很大不同:

>>> int('2a', 11)
32
>>> int('2a', 29)
68

只有在 以视觉方式呈现 值或从字符串表示形式解析整数值时,您才需要整数的基数。您可以用许多不同的方式显示整数值,但 int 对象是值,而不是视觉表示,并且没有基数,您也不能更改该基数。

已经支持十六进制表示法(数字0-9和字母A-F)的逻辑扩展,也支持使用字母G-Z,10位数字和26个字母可以使用基数36:

>>> int('zz', 36)
1295

更多的碱基需要使用非字母数字符号,对此没有明确的预设顺序。

底数不能低于 2;你不能只用一个数字计算value of 0不会改变。