Добавить переменные в кортеж
Я изучаю Python и создаю соединение с базой данных.
При попытке добавить к БД я собираюсь создать кортежи из информации, а затем добавить их в БД.
Что я делаю:
Я беру информацию от пользователя и сохраняю ее в переменных.
Могу ли я добавить эти переменные в кортеж? Не могли бы вы помочь мне с синтаксисом?
Также, если есть эффективный способ сделать это, пожалуйста, поделитесь...
ИЗМЕНИТЬ
Позвольте мне немного изменить этот вопрос... Мне нужен кортеж, чтобы вводить информацию в БД. Как только информация будет добавлена в БД, я должен удалить кортеж? Я имею в виду, что мне больше не нужен кортеж.
Ответы
Ответ 1
Кортежи неизменяемы; вы не можете изменить, какие переменные они содержат после построения. Однако вы можете объединить или нарезать их, чтобы сформировать новые кортежи:
a = (1, 2, 3)
b = a + (4, 5, 6)
c = b[1:]
И, конечно, постройте их из существующих значений:
name = "Joe"
age = 40
location = "New York"
joe = (name, age, location)
Ответ 2
Вы можете начать с пустого кортежа с чем-то вроде t = ()
. Вы можете добавить с помощью +
, но вам нужно добавить еще один кортеж. Если вы хотите добавить один элемент, сделайте его singleton: t = t + (element,)
. Вы можете добавить кортеж из нескольких элементов с этой запятой или без нее.
>>> t = ()
>>> t = t + (1,)
>>> t
(1,)
>>> t = t + (2,)
>>> t
(1, 2)
>>> t = t + (3, 4, 5)
>>> t
(1, 2, 3, 4, 5)
>>> t = t + (6, 7, 8,)
>>> t
(1, 2, 3, 4, 5, 6, 7, 8)
Ответ 3
Еще одна тактика, о которой еще не упоминалось, заключается в использовании добавления к списку, а затем преобразования списка в кортеж в конце:
mylist = []
for x in range(5):
mylist.append(x)
mytuple = tuple(mylist)
print mytuple
возвращает
(0, 1, 2, 3, 4)
Я иногда использую это, когда мне нужно передать кортеж как аргумент функции, который часто необходим для функций numpy.
Ответ 4
В Python 3 вы можете использовать *
для создания нового кортежа элементов из исходного кортежа вместе с новым элементом.
>>> tuple1 = ("foo", "bar")
>>> tuple2 = (*tuple1, "baz")
>>> tuple2
('foo', 'bar', 'baz')
Ответ 5
Это так просто:
info_1 = "one piece of info"
info_2 = "another piece"
vars = (info_1, info_2)
# 'vars' is now a tuple with the values ("info_1", "info_2")
Однако кортежи в Python неизменяемы, поэтому вы не можете добавлять переменные в кортеж после его создания.
Ответ 6
"как только информация добавляется в БД, я должен удалить кортеж? Я имею в виду, что мне больше не нужен кортеж.
Нет.
Как правило, нет причин удалять что-либо. Есть некоторые специальные случаи для удаления, но они очень, очень редки.
Просто определите узкую область (т.е. определение функции или функцию метода в классе), и объекты будут мусором, собранным в конце области.
Не беспокойтесь о том, чтобы удалить что-либо.
[Примечание. Я работал с парнем, который - в дополнение к попытке удалить объекты - всегда писал методы "reset", чтобы очистить их. Как будто он собирался спасти их и использовать их повторно. Также глупое тщеславие. Просто игнорируйте объекты, которые вы больше не используете. Если вы определяете свои функции в блоках с достаточно малым количеством кода, вам больше не о чем подумать.]
Ответ 7
Как уже отмечалось в других ответах, вы не можете изменить существующий кортеж, но всегда можете создать новый кортеж (который может принимать некоторые или все элементы из существующих кортежей и/или других источников).
Например, если все интересующие объекты находятся в скалярных переменных, и вы знаете имена этих переменных:
def maketuple(variables, names):
return tuple(variables[n] for n in names)
например, как в этом примере:
def example():
x = 23
y = 45
z = 67
return maketuple(vars(), 'x y z'.split())
конечно, этот случай был бы более просто выражен как (x, y, z)
(или даже вообще назвал имена, (23, 45, 67)
), но подход maketuple
мог бы быть полезен в некоторых более сложных случаях (например, где имена использование также определяется динамически и добавляется к списку во время вычисления).
Ответ 8
Я уверен, что синтаксис этого в python таков:
user_input1 = raw_input("Enter Name: ")
user_input2 = raw_input("Enter Value: ")
info = (user_input1, user_input2)
после набора, кортежи не могут быть изменены.