Аргумент base равен 0 для функции int

Рейтинг: 9Ответов: 2Опубликовано: 11.01.2023

Аргумент base для функции int() может быть равен 0, что это за система исчисления?

Ответы

▲ 2Принят

Применение параметра base=0 можно понимать как автоматический выбор

  • одного из параметров base=2, base=8, base=10, base=16,

  • на основе формы первого параметра.


Примечание:

Первый параметр функции-конструктора int() может начинаться с пробелов и/или табуляторов, после которых может быть еще символ + или -.

Они для автоматического выбора не важны — анализ начинается после них.


Алгорифм:

  1. Если первым символом является нуль (0), то следующим символом должен быть один из

    • b или B (binary, двоичная), тогда применяется base=2,
    • o или O (octal, восьмеричная), тогда применяется base=8,
    • x или X (hexadecimal, шестнадцатеричная), тогда применяется base=16,

    иначе возникает ошибка.

  2. Если первым символом является ненулевая десятичная цифра,

    • тогда применяется base=10.
  3. Иначе возникает ошибка.


Сравните:

int( "17")            # 17
int( "17",  10)       # 17
int( "17",  16)       # 23 (= 1*16 + 7)
int( "17",   0)       # 17

int( "017", 10)       # 17
int( "017",  0)       #    ошибка - после нуля в начале должно быть b, B, o, O, x или X

int(  "11")           # 11
int(  "11",  2)       #  3 (= 1*2 + 1)
int("0b11",  2)       #  3
int("0b11",  0)       #  3  - автоматически int("0b11", 2)

int(  "17")           # 17
int(  "17",  2)       #    ошибка - цифры 7 нет в двоичной системе
int(  "17",  8)       # 15 (= 1*8 + 7)
int("0x17",  8)       #    ошибка - 0x17 не является восьмеричным числом из-за 0x в начале
int("0x17",  0)       # 23 (= 1*16 + 7) - автоматически int("0x17", 16)
▲ 7

В Python, когда база аргументов для функции int() равна 0, это интерпретируется как механизм «автоматического обнаружения». Функция попытается определить основание передаваемого числа на основе префикса строкового представления этого числа. Если строка начинается с «0x», число считается шестнадцатеричным (по основанию 16), если оно начинается с «0o», число считается восьмеричным (по основанию 8), а если оно начинается с «0b ", число считается двоичным (с основанием 2). Если строка начинается с любой другой цифры или если она начинается с «0», но не имеет префикса, функция будет считать, что число является десятичным (с основанием 10).