Аргумент base равен 0 для функции int
Аргумент base
для функции int()
может быть равен 0, что это за система исчисления?
Аргумент base
для функции int()
может быть равен 0, что это за система исчисления?
Применение параметра base=0
можно понимать как автоматический выбор
одного из параметров base=2
, base=8
, base=10
, base=16
,
на основе формы первого параметра.
Примечание:
Первый параметр функции-конструктора int()
может начинаться с пробелов и/или табуляторов, после которых может быть еще символ +
или -
.
Они для автоматического выбора не важны — анализ начинается после них.
Алгорифм:
Если первым символом является нуль (0
), то следующим символом должен быть один из
b
или B
(binary, двоичная), тогда применяется base=2
,o
или O
(octal, восьмеричная), тогда применяется base=8
,x
или X
(hexadecimal, шестнадцатеричная), тогда применяется base=16
,иначе возникает ошибка.
Если первым символом является ненулевая десятичная цифра,
base=10
.Иначе возникает ошибка.
Сравните:
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)
В Python, когда база аргументов для функции int() равна 0, это интерпретируется как механизм «автоматического обнаружения». Функция попытается определить основание передаваемого числа на основе префикса строкового представления этого числа. Если строка начинается с «0x», число считается шестнадцатеричным (по основанию 16), если оно начинается с «0o», число считается восьмеричным (по основанию 8), а если оно начинается с «0b ", число считается двоичным (с основанием 2). Если строка начинается с любой другой цифры или если она начинается с «0», но не имеет префикса, функция будет считать, что число является десятичным (с основанием 10).