2009-09-04 14 views
172

Sto imparando Python e creando una connessione al database. Durante il tentativo di aggiungere al DB, sto pensando di creare tuple di informazioni e quindi aggiungerle al DB.Aggiungere le variabili alla tupla

Cosa sto facendo: Sto recuperando le informazioni dall'utente e le memorizzo nelle variabili. Posso aggiungere queste variabili in una tupla? Puoi per favore aiutarmi con la sintassi?

anche se non v'è un modo efficace di fare questo, si prega di condividere ...

EDIT Permettetemi di modificare questa domanda un po '... ho solo bisogno la tupla per immettere le informazioni nel DB. Una volta che le informazioni sono state aggiunte al DB, dovrei cancellare la tupla? Voglio dire che non ho più bisogno della tupla.

risposta

225

Le tuple sono immutabili; non è possibile modificare le variabili che contengono dopo la costruzione. Tuttavia, è possibile concatenare o tagliare per formare nuove tuple:

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

E, naturalmente, li costruire da valori esistenti:

name = "Joe" 
    age = 40 
    location = "New York" 
    joe = (name, age, location) 
+0

ho bisogno solo di queste tuple per l'aggiunta al db dopo l'input dell'utente. quindi devo distruggere queste tuple dopo che l'aggiornamento al db è completato? – amit

+5

Non è necessario distruggere le tuple dopo aver aggiornato il db. Se escono dal campo di applicazione dovrebbero essere raccolti dalla spazzatura. –

+0

Per aggiungere una stringa alla tupla senza rompere la stringa stessa, controllare https://stackoverflow.com/a/16449189 –

7

E 'facile come il seguente:

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

Tuttavia, tuple in Python sono immutabili, quindi non è possibile aggiungere variabili a una tupla una volta che è stato creato.

1

Sono abbastanza sicuro che la sintassi per questo in pitone è:

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

una volta insieme, tuple non può essere modificato.

2

Come altre risposte hanno notato, non è possibile modificare una tupla esistente , ma puoi sempre creare una nuova tupla (che potrebbe richiedere alcuni o tutti gli elementi da tuple esistenti e/o altre fonti).

Per esempio, se tutti gli elementi di interesse sono a variabili scalari e si conoscono i nomi di queste variabili:

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

da utilizzare, ad esempio, come in questo esempio:

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

ovviamente questo caso sarebbe più semplicemente espresso come (x, y, z) (o anche prima di cancellare i nomi del tutto, (23, 45, 67)), ma l'approccio maketuple potrebbe essere utile in alcuni casi più complicati (ad esempio, dove vengono determinati anche i nomi da utilizzare durante la fase di computazione).

3

"una volta che le informazioni vengono aggiunte al DB, devo eliminare la tupla? Voglio dire che non ho più bisogno della tupla."

No.

In generale, non c'è alcun motivo per eliminare qualsiasi cosa. Ci sono alcuni casi speciali per la cancellazione, ma sono molto, molto rari.

Basta definire un ambito ristretto (ad esempio, una definizione di funzione o una funzione di metodo in una classe) e gli oggetti saranno garbage collection alla fine dell'ambito.

Non preoccuparti di eliminare nulla.

[Nota. Ho lavorato con un ragazzo che, oltre a provare a eliminare oggetti, stava sempre scrivendo i metodi "reset" per eliminarli. Come se stesse per salvarli e riutilizzarli. Anche una sciocca presunzione. Ignora solo gli oggetti che non usi più. Se definisci le tue funzioni in blocchi di codice abbastanza piccoli, non hai altro a cui pensare.]

161

Puoi iniziare con una tupla vuota con qualcosa come t =(). È possibile aggiungere con +, ma è necessario aggiungere un'altra tupla. Se si desidera aggiungere un singolo elemento, renderlo un singleton: t = t + (element,). È possibile aggiungere una tupla di più elementi con o senza la virgola finale.

>>> 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) 
+11

In questo esempio, si può anche fare: 't =()' then 't + = (1,) ' –

29

Un'altra tattica non ancora menzionato utilizza aggiungendo a un elenco, e poi convertendo l'elenco in una tupla alla fine:

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

rendimenti

(0, 1, 2, 3, 4) 

volte uso questo quando devo passare una tupla come argomento di funzione, che è spesso necessario per le funzioni di numpy.

+1

È utile sapere che funziona anche il contrario di ciò, cioè' list (someTuple) '. I due tipi di oggetto sono apparentemente intercambiabili – khaverim

+0

Non proprio intercambiabili, penso che la conversione da tuple a list copierà tutti gli elementi nell'elenco, quindi ci sono sicuramente posti per evitarlo – gbtimmon

Problemi correlati