Как можно сохранить несколько переменных одним числом?
В 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
Что удобно - можно хранить и не запутаться при использовании любого количества значений каких угодно типов.