2009-09-04 14 views
172

Uczę się Pythona i tworzenia połączenia z bazą danych. Podczas próby dodania do DB, myślę o tworzeniu krotek z informacji, a następnie dodać je do DB.Dodaj zmienne do Tuple

Co robię: Odbieram informacje od użytkownika i zapisuję je w zmiennych. Czy mogę dodać te zmienne do krotki? Czy możesz mi pomóc ze składnią?

także czy istnieje skuteczny sposób to zrobić, proszę podzielić ...

EDIT Pozwól edytować to pytanie trochę ... Muszę tylko krotki wprowadzanie informacji do DB. Po dodaniu informacji do bazy danych, czy powinienem usunąć tę krotkę? Chodzi mi o to, że już nie potrzebuję krotki.

Odpowiedz

225

Krotki są niezmienne; nie można zmienić, które zmienne zawierają po zakończeniu budowy. Jednak można złączyć lub pokroić je, tworząc nowe krotki:

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

I, oczywiście, zbudować je od istniejących wartości:

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

Potrzebuję tylko tych krotek do dodawania do bazy danych po wprowadzeniu danych przez użytkownika. więc czy powinienem zniszczyć te krotki po zakończeniu aktualizacji do bazy danych? – amit

+5

Nie musisz zniszczyć krotek po aktualizacji db. Jeśli wykroczą poza zakres, powinny być zbierane śmieci. –

+0

Aby dodać ciąg do krotki bez zerwania samego ciągu sprawdź https://stackoverflow.com/a/16449189 –

7

To tak proste, jak:

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

jednak krotki w Pythonie są niezmienne, więc nie można dołączyć zmiennych do krotki po jej utworzeniu.

1

jestem całkiem pewny, składnia to w Pythonie jest:

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

raz planie krotki nie mogą być zmieniane.

2

Jak zauważyli inni odpowiedzi, nie można zmienić istniejący krotki , ale zawsze możesz utworzyć nową krotkę (która może zająć niektóre lub wszystkie elementy z istniejących krotek i/lub innych źródeł).

Na przykład, jeśli wszystkie interesujące są w zmiennych skalarnych i znasz nazwy tych zmiennych:

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

być użyte, np jak w poniższym przykładzie:

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

oczywiście ten jeden przypadek zostałby po prostu wyrażony jako (x, y, z) (lub nawet łącznie z tymi nazwami, (23, 45, 67)), ale podejście maketuple może być użyteczne w niektórych bardziej skomplikowanych przypadkach (np. Gdzie używane nazwy są również określone. mically i dołączony do listy podczas obliczeń).

3

"po dodaniu informacji do DB, czy powinienem usunąć krotkę? Mam na myśli, że już nie potrzebuję krotki."

nr

Generalnie, nie ma powodu, aby usunąć wszystko. Jest kilka specjalnych przypadków kasowania, ale są bardzo, bardzo rzadkie.

Po prostu zdefiniuj wąski zakres (to znaczy definicję funkcji lub funkcję metody w klasie), a obiekty zostaną usunięte z pamięci na końcu zakresu.

Nie martw się o usunięcie czegokolwiek.

[Uwaga. Pracowałem z facetem, który - oprócz próby usunięcia obiektów - zawsze pisał "reset", aby je usunąć. Tak jakby zamierzał ich ocalić i wykorzystać ponownie. Również głupia zarozumiałość. Po prostu zignoruj ​​obiekty, których już nie używasz. Jeśli definiujesz swoje funkcje w wystarczająco małych blokach kodu, nie masz o czym myśleć.]

161

Możesz zacząć od pustej krotki z czymś takim, jak t =(). Możesz dodać z +, ale musisz dodać kolejną krotkę. Jeśli chcesz dodać pojedynczy element, ustaw go jako singleton: t = t + (element,). Możesz dodać krotkę wielu elementów z przecinkiem lub bez niego.

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

W tym przypadku przykład można również zrobić: 't =()' następnie 't + = (1,) ' –

29

Inną taktyką jeszcze nie wspomniano korzysta dołączenie do listy, a następnie przekształcając listę krotki na koniec:

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

powraca

(0, 1, 2, 3, 4) 

I czasami to wykorzystać kiedy muszę przekazać krotkę jako argument funkcji, co często jest konieczne w przypadku funkcji numpy.

+1

Warto wiedzieć, że działa również odwrotność tej, czyli' list (someTuple). Dwa typy obiektów są wyraźnie wymienne – khaverim

+0

Niezupełnie wymienne, myślę, że konwersja z krotki na listę skopiuje wszystkie elementy na liście, więc zdecydowanie jest miejsce, aby tego uniknąć – gbtimmon