Oct: примеры (PYTHON)
oct(number): strФункция oct в Python
Функция oct() в языке Python преобразует целое число в строковое представление в восьмеричной системе счисления. Результат всегда начинается с префикса 0o, что позволяет явно указать на восьмеричную систему. Функция часто применяется для отладки, работы с низкоуровневыми данными или при необходимости вывода чисел в форматах, отличных от десятичного.
Функция принимает один обязательный аргумент:
- x - целое число (объект типа
int) или объект, реализующий метод__index__(), возвращающий целое число. Другие типы данных вызывают исключениеTypeError.
Возвращаемое значение - строка (тип str), содержащая восьмеричное представление числа с префиксом 0o. Для отрицательных чисел результат начинается с -0o, а для нуля возвращается 0o0.
Примеры использования функции oct
Использование с положительными и отрицательными целыми числами:
print(oct(10))0o12
print(oct(-10))-0o12
Применение к нулю:
print(oct(0))0o0
Использование с объектом, реализующим метод __index__:
class MyClass:
def __index__(self):
return 42
obj = MyClass()
print(oct(obj))0o52
Похожие функции в Python
В Python существуют другие функции для преобразования чисел в строковые представления в различных системах счисления:
- bin(x) - преобразует целое число в двоичную строку с префиксом
0b. - hex(x) - преобразует целое число в шестнадцатеричную строку с префиксом
0x. - format(x, 'o') - возвращает восьмеричное представление числа без префикса. Добавление символа
#в форматную строку ('#o') добавляет префикс0o. - f'{x:o}' - f-строка с форматом для восьмеричного вывода. Использование
#{x:o}также добавляет префикс.
Функция oct() удобна для быстрого преобразования с гарантированным префиксом, тогда как format() и f-строки предоставляют больше гибкости при форматировании.
Альтернативы в других языках программирования
JavaScript: метод toString(8) преобразует число в восьмеричную строку без префикса.
console.log((10).toString(8));12
PHP: функция decoct() возвращает восьмеричную строку без префикса.
echo decoct(10);12
Java: метод Integer.toOctalString() возвращает строку без префикса.
System.out.println(Integer.toOctalString(10));12
C#: использование форматирования Convert.ToString() или строк форматирования.
Console.WriteLine(Convert.ToString(10, 8));12
SQL: в некоторых СУБД, например MySQL, функция OCT() возвращает восьмеричное представление строкой.
SELECT OCT(10);12
Lua: стандартной функции нет, но можно использовать string.format() с форматным спецификатором %o.
print(string.format('%o', 10))12
Golang: функция fmt.Sprintf() с форматом %o или %#o для префикса.
import "fmt"
fmt.Printf("%#o", 10)012
Kotlin: метод toString(8) аналогичен JavaScript.
println(10.toString(8))12
В отличие от Python, многие языки не добавляют стандартный префикс для восьмеричных чисел, что требует его явного указания при необходимости.
Типичные ошибки при использовании
Наиболее частая ошибка - передача аргумента, не являющегося целым числом или объектом с методом __index__.
print(oct(10.5))TypeError: 'float' object cannot be interpreted as an integer
Передача строки также вызывает исключение:
print(oct("10"))TypeError: 'str' object cannot be interpreted as an integer
Ошибка может возникать при использовании пользовательского класса без реализации __index__:
class MyClass:
pass
obj = MyClass()
print(oct(obj))TypeError: 'MyClass' object cannot be interpreted as an integer
Изменения в последних версиях Python
В Python 3 функция oct() всегда возвращает строку с префиксом 0o. В Python 2 функция возвращала строку, которая для положительных чисел могла начинаться с 0 без последующей o, а для отрицательных - с -0. Изменение в Python 3 улучшило единообразие с функциями bin() и hex().
Начиная с Python 3.11, значимых изменений в работе функции не вносилось. Актуальные версии Python сохраняют её поведение стабильным.
Расширенные примеры применения oct
Использование oct совместно с срезами для получения восьмеричного представления без префикса:
result = oct(42)[2:]
print(result)52
Преобразование списка целых чисел в восьмеричные строки:
numbers = [8, 16, 24]
octal_list = [oct(num) for num in numbers]
print(octal_list)['0o10', '0o20', '0o30']
Использование восьмеричных литералов для проверки работы функции:
value = 0o52 # Восьмеричный литерал для числа 42
print(oct(value))0o52
Пользовательский класс с методом __index__ для управления преобразованием:
class CustomIndex:
def __init__(self, value):
self.value = value
def __index__(self):
return self.value * 2
obj = CustomIndex(5)
print(oct(obj))0o12
Обработка отрицательных чисел при форматировании с использованием f-строк как альтернативы:
num = -42
print(f'{num:#o}')-0o52
Восстановление десятичного числа из восьмеричной строки с помощью int:
oct_str = '0o52'
decimal_num = int(oct_str, 8)
print(decimal_num)42