Вы можете использовать словари для этого. Словари - это хранилища ключей и ценностей.
>>> dct = {'x': 1, 'y': 2, 'z': 3}
>>> dct
{'y': 2, 'x': 1, 'z': 3}
>>> dct["y"]
2
Вы можете использовать имена переменных ключей для достижения эффекта переменных переменных без риска для безопасности.
>>> x = "spam"
>>> z = {x: "eggs"}
>>> z["spam"]
'eggs'
В тех случаях, когда вы думаете сделать что-то вроде
var1 = 'foo'
var2 = 'bar'
var3 = 'baz'
...
список может быть более подходящим, чем dict. Список представляет упорядоченную последовательность объектов с целыми индексами:
l = ['foo', 'bar', 'baz']
print(l[1]) # prints bar, because indices start at 0
l.append('potatoes') # l is now ['foo', 'bar', 'baz', 'potatoes']
Для упорядоченных последовательностей списки удобнее, чем dict с целыми ключами, потому что списки поддерживают итерацию в порядке индекса, slicing , append
и другие операции, которые потребуют неудобного управления ключами с помощью dict.
из предыдущего опыта, который я всегда нахожу, если вам нужно «отложить», что-то еще не так.
blockquote>Право. Здесь я подозреваю, что вы предполагаете, что чтение на сокете вернет полное сообщение.
Но TCP / IP является потоковым протоколом и не включает в себя понятия «Сообщения». Чтобы успешно использовать TCP / IP напрямую, вы должны определить «протокол формирования сообщений», чтобы сообщить удаленному хосту, сколько байтов ожидать. Я не вижу, чтобы вы что-то писали перед сообщением, поэтому я подозреваю, что этого не хватает.
Простое решение, которое используют многие люди, - это всегда отправлять 4-байтовое целое число в начале сообщения, указывающее количество байтов, которое будет отправлено. Затем считыватель может выполнить 4-байтовое чтение, после чего следует цикл чтения, пока не будет прочитано ожидаемое количество байтов.