代码之家  ›  专栏  ›  技术社区  ›  sahasrara62

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

  •  1
  • sahasrara62  · 技术社区  · 5 年前

    我发现当我在python中运行以下表达式时

    int(33, base=100)
    

    我得到以下错误:

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

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

    3 回复  |  直到 5 年前
        1
  •  2
  •   Martijn Pieters    5 年前

    首先:只能为 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
  •  4
  •   user2357112    5 年前

    这个 base 论证 int 用于解析字符串,而不是将int传递给 int :

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

    用A,B,C,…,Z代表10,11,12,…,35的数字是一个很好的惯例,但是用37为基数的数字36使用什么符号没有惯例。

        3
  •  1
  •   Prune    5 年前

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

    使用数字和整个字母表是很常见的,所以 base 带有一组连续可接受基值的函数实现了目前为止的功能。基1只是len(arg)。

    还有一种对base-64编码的约定;但是,如果没有对值37-63的约定, 基础 函数为单独的接口保留了基数64值。