我发现当我在python中运行以下表达式
int(33, base=100)
我收到以下错误:
ValueError: int() base must be >= 2 and <= 36, or 0
我对此限制没有任何解释; another Stack Overflow question about the same error message没有提到为什么将基本参数限制为该范围。
答案 0 :(得分:5)
解析base
的{{1}}参数是在解析字符串时使用,而不是在将int传递给int
时使用:
int
使用a,b,c,...,z代表10、11、12,...,35的数字是一种公认的惯例,但对于数字36中使用的符号没有惯例以37为底。
答案 1 :(得分:3)
首先:将字符串转换为数字时,只能为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
就不会改变。
答案 2 :(得分:2)
这是一个实用的实现约定。您认为以100为基数的字符集是什么? :-)
使用数字和整个字母足够常见,因此base
函数具有一组连续的可接受的基值,可以实现目前为止的功能。以1为底的就是len(arg)。
对于base-64编码也有约定;但是,在没有约定值37-63的情况下,base
函数将radix-64值留给了单独的接口。