Adicionar variáveis ​​à tupla

282

Estou aprendendo Python e criando uma conexão com o banco de dados. Ao tentar adicionar ao banco de dados, estou pensando em criar tuplas com informações e adicioná-las ao banco de dados.

O que estou fazendo : estou pegando informações do usuário e armazenando-as em variáveis. Posso adicionar essas variáveis ​​em uma tupla? Você pode me ajudar com a sintaxe?

Além disso, se houver uma maneira eficiente de fazer isso, compartilhe ...

EDIT Deixe-me editar um pouco esta pergunta ... Só preciso da tupla para inserir informações no banco de dados. Depois que as informações são adicionadas ao banco de dados, devo excluir a tupla? Quero dizer, não preciso mais da tupla.

amit
fonte

Respostas:

370

Tuplas são imutáveis; você não pode alterar quais variáveis ​​eles contêm após a construção. No entanto, você pode concatená-las ou cortá-las para formar novas tuplas:

a = (1, 2, 3)
b = a + (4, 5, 6)  # (1, 2, 3, 4, 5, 6)
c = b[1:]  # (2, 3, 4, 5, 6)

E, é claro, construa-os a partir dos valores existentes:

name = "Joe"
age = 40
location = "New York"
joe = (name, age, location)
John Millikin
fonte
Eu só preciso dessas tuplas para adicionar ao db após a entrada do usuário. então devo destruir essas tuplas após a conclusão da atualização para o banco de dados?
Amit
5
Você não precisa destruir as tuplas após atualizar o banco de dados. Se ficarem fora do escopo, deverão ser coletados como lixo.
Justin Standard
Para adicionar uma string à tupla sem quebrar a própria string, verifique stackoverflow.com/a/16449189
Enzo Ferey
Apenas para adicionar,, a = ()e b= a + (5), leva a b = 5, portanto b= a + (5,), levaria a b = (5,); uma tupla.
precisa saber é o seguinte
221

Você pode começar com uma tupla em branco com algo parecido t = (). Você pode adicionar +, mas precisa adicionar outra tupla. Se você quiser adicionar um único elemento, torná-lo um singleton: t = t + (element,). Você pode adicionar uma tupla de vários elementos com ou sem essa vírgula.

>>> 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)
Daniel
fonte
20
Neste caso de exemplo, também se pode fazer: t = ()thent += (1,)
Douglas Denhartog
2
Qual o benefício de incluir a vírgula à direita?
Splic
13
A vírgula à direita é necessária para o singleton para evitar confusão entre um elemento entre parênteses. Parênteses simples são usados ​​na ordem das operações, então (7) é apenas 7. Mas (7,) é uma tupla de um elemento em que o elemento é 7. Da mesma forma, 3 * (7 + 8) = 45, mas 3 * ( 7 + 8,) = (15, 15, 15) - isso faz sentido?
Daniel
2
Quanto às tuplas com vários elementos, a vírgula à direita é 100% opcional. Incluindo isso meio que significa "esta é uma tupla, eu sei que é uma tupla, sei como as tuplas funcionam e sei que posso fazer isso". Mas nenhuma vírgula pode parecer mais natural. Sei lá. Você decide.
Daniel
Eu acho importante observar que as tuplas são imutáveis ​​- elas não podem realmente ser modificadas. O que essa solução faz é criar uma nova tupla com base em duas tuplas existentes .
precisa saber é o seguinte
44

Outra tática ainda não mencionada é o uso de anexar a uma lista e, em seguida, converter a lista em uma tupla no final:

mylist = []
for x in range(5):
    mylist.append(x)
mytuple = tuple(mylist)
print mytuple

retorna

(0, 1, 2, 3, 4)

Às vezes eu uso isso quando tenho que passar uma tupla como argumento de função, que geralmente é necessário para as funções numpy.

ehontz
fonte
3
É útil saber que o inverso disso, ou seja, list(someTuple)funciona também. Os dois tipos de objetos são aparentemente intercambiáveis
khaverim
Não realmente intercambiáveis, acho que a conversão de tupla à lista irá copiar todos os elementos da lista, por isso não são, definitivamente, colocar para evitá-lo
gbtimmon
41

No Python 3, você pode usar *para criar uma nova tupla de elementos a partir da tupla original junto com o novo elemento.

>>> tuple1 = ("foo", "bar")
>>> tuple2 = (*tuple1, "baz")
>>> tuple2
('foo', 'bar', 'baz')
Yang Bo
fonte
2
Este é de longe o mais pitônico para mim.
Bumsik Kim
6
Isso é 10x mais lento que tuple1 + ("baz",).
Mateen Ulhaq
9

"uma vez que a informação é adicionada ao banco de dados, devo excluir a tupla? Quero dizer, não preciso mais dela."

Não.

Geralmente, não há motivo para excluir nada. Existem alguns casos especiais para exclusão, mas são muito, muito raros.

Basta definir um escopo restrito (ou seja, uma definição de função ou uma função de método em uma classe) e os objetos serão coletados como lixo no final do escopo.

Não se preocupe em excluir nada.

[Nota. Eu trabalhei com um cara que - além de tentar excluir objetos - estava sempre escrevendo métodos de "redefinição" para eliminá-los. Como se ele fosse salvá-los e reutilizá-los. Também uma presunção boba. Apenas ignore os objetos que você não está mais usando. Se você definir suas funções em blocos de código suficientemente pequenos, não terá mais nada em que pensar.]

S.Lott
fonte
7

É tão fácil quanto o seguinte:

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")

No entanto, as tuplas no Python são imutáveis , portanto, você não pode anexar variáveis ​​a uma tupla depois de criada.

mipadi
fonte
3

Como outras respostas observaram, você não pode alterar uma tupla existente, mas sempre pode criar uma nova tupla (que pode levar alguns ou todos os itens de tuplas existentes e / ou outras fontes).

Por exemplo, se todos os itens de interesse estiverem em variáveis ​​escalares e você souber os nomes dessas variáveis:

def maketuple(variables, names):
  return tuple(variables[n] for n in names)

para ser usado, por exemplo, como neste exemplo:

def example():
  x = 23
  y = 45
  z = 67
  return maketuple(vars(), 'x y z'.split())

é claro que esse único caso seria mais simplesmente expresso como (x, y, z)(ou até mesmo precedendo os nomes (23, 45, 67)), mas a maketupleabordagem pode ser útil em alguns casos mais complicados (por exemplo, onde os nomes a serem usados ​​também são determinados dinamicamente e anexados a uma lista durante o processo). computação).

Alex Martelli
fonte
2

Tenho certeza de que a sintaxe para isso em python é:

user_input1 = raw_input("Enter Name: ")
user_input2 = raw_input("Enter Value: ")
info = (user_input1, user_input2)

uma vez definidas, as tuplas não podem ser alteradas.

Jon W
fonte