Добавить переменные в кортеж

Я изучаю 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)

после набора, кортежи не могут быть изменены.