2.8. Tupluri¶
Un tuplu este o secvență de valori imuabilă și ordonată. Odată creat, elementele din interior nu pot fi adăugate, eliminate sau modificate.
2.8.1. Crearea tuplurilor¶
Folosește paranteze (sau doar virgule) pentru a crea un tuplu:
empty = ()
point = (3, 4)
triple = 1, 2, 3 # parentheses are optional
mixed = (1, "two", 3.14)
nested = ((1, 2), (3, 4))
2.8.1.1. Capcana elementului unic¶
Parantezele din jurul unei valori sunt doar paranteze; ceea ce face cu adevărat un tuplu este virgula. Un tuplu cu un singur element are nevoie de o virgulă finală:
>>> (1)
1 # just an int in parens
>>> (1,)
(1,) # a one-element tuple
>>> type((1)), type((1,))
(<class 'int'>, <class 'tuple'>)
2.8.2. Lungime, indexare și feliere¶
La fel ca listele și șirurile – len(), indexarea, felierea, in și + / * funcționează toate în același mod:
>>> point = (3, 4, 5)
>>> len(point)
3
>>> point[0]
3
>>> point[1:]
(4, 5)
>>> 4 in point
True
>>> (1, 2) + (3, 4)
(1, 2, 3, 4)
2.8.3. Imuabilitate¶
Tuplurile nu au append, pop, sort sau orice altă metodă pe loc. Atribuirea indexată declanșează TypeError:
>>> point = (3, 4)
>>> point[0] = 99
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item assignment
Pentru a „modifica” un tuplu, construiește unul nou cu valorile schimbate.
2.8.4. Despachetare¶
Principala superputere a unui tuplu este despachetarea: atribuirea fiecărui element unei variabile separate într-o singură instrucțiune.
Despachetarea leagă fiecare element al unui tuplu de o variabilă denumită într-o singură atribuire.¶
>>> point = (3, 4)
>>> x, y = point
>>> x
3
>>> y
4
Partea din dreapta poate fi orice iterabil – o listă, un șir, valoarea returnată a unei funcții:
>>> a, b, c = "abc"
>>> a, b, c
('a', 'b', 'c')
Un * la început colectează „restul” unei despachetări într-o listă:
>>> first, *rest = [10, 20, 30, 40]
>>> first
10
>>> rest
[20, 30, 40]
2.8.5. Valori returnate multiple¶
O funcție poate returna un tuplu pentru a livra mai multe valori deodată; apelantul le despachetează la primire:
def size_of(rect):
return (rect[2] - rect[0], rect[3] - rect[1])
width, height = size_of((10, 20, 110, 140))
# width = 100, height = 120
Parantezele de la return sunt opționale – un simplu return a, b este de asemenea un tuplu.
2.8.6. Tuplu vs listă¶
Un ghid practic pentru care dintre ele să apelezi:
Tuplu pentru date cu formă fixă, adesea eterogene: puncte
(x, y), culori(r, g, b), valori returnate multiple, argumente de funcție împachetate pentru utilizare ulterioară.Listă pentru date de lungime variabilă, adesea omogene: o listă de măsurători, o coadă de elemente de procesat, orice te aștepți să adaugi prin append.
Tuplurile sunt de asemenea hashable (atât timp cât fiecare element din interior este hashable), așa că pot fi folosite ca chei într-un dict.