Как можно сохранить несколько переменных одним числом?

В Python я имею значения нескольких переменных:

x = 8
y = 3
isIntDivisionAvailable = True

как мне упаковать эти значения одним числом?(x и y остаются в пределах 127)


Ответы (3 шт):

Автор решения: MBo

При x, y в диапазоне 0..127:

packed = y * 128 + x
...
y = packed // 128
x = packed % 128

или

y, x = divmod(packed, 128)
→ Ссылка
Автор решения: CrazyElf

Вариант со сдвигами, как я писал в комментарии:

x = 8
y = 3
isIntDivisionAvailable = True

def pack(a, b, c):
    return a << (8+1) | b << 1 | c

def unpack(v):
    a = v >> (8+1)
    v -= a << (8+1)
    b = v >> 1
    c = bool(v & 1)
    return a, b, c

v = pack(x, y, isIntDivisionAvailable)
print(v)
x1, y1, i1 = unpack(v)
print(x1, y1, i1)

Вывод:

4103
8 3 True
→ Ссылка
Автор решения: Алексей Р

Непонятно, почему бы не использовать удобные структуры данных. В Python что число - объект, что объект - объект. Просто создать класс (можно и словарь, но не так удобно) для хранения набора значений и обращаться к каждому числу внутри "пакета значений" по имени.

class ValPack():
    def __init__(self, x, y, isIntDivisionAvailable):
        super().__init__()
        self.x = x
        self.y = y
        self.isIntDivisionAvailable = isIntDivisionAvailable

    def __str__(self):
        return f'x = {s1.x}, y = {s1.y}, isIntDivisionAvailable = {s1.isIntDivisionAvailable}'


s1 = ValPack(8, 3, True)
s2 = ValPack(18, 13, True)
s3 = ValPack(3, 0, False)

print(s1)
x = 8, y = 3, isIntDivisionAvailable = True

Что удобно - можно хранить и не запутаться при использовании любого количества значений каких угодно типов.

→ Ссылка