Lecții din modul (2/4)
Tuplele și despachetarea
Un tuplu este o secvență ordonată și imuabilă: odată creată, puteți nu-și mai schimba elementele. Este scris cu paranteze (chiar dacă ceea ce o defineste de fapt este virgula).
Crearea unui tuplu
vuota = ()
una = (42,) # ATTENZIONE: senza virgola, (42) è solo 42 fra parentesi
coords = (10, 20)
mista = ("Ada", 36, True)Accesul prin indexare și feliere funcționează exact ca pentru liste: coords[0],
coords[-1], mista[:2].
Când să folosiți un tuplu în loc de o listă
- Când valoarea reprezintă o colecție fixă care nu trebuie să se modifice
(coordonate, o dată ca
(year, month, day), o versiune(1, 2, 3)). - Când trebuie să utilizați valoarea ca cheie de dicționar sau ca element al
a
set: pot fi folosite numai obiecte imuabile (hashable). - Când doriți să semnalați cititorului codului că aceea valoare este „înghețat”.
Dezambalarea: caracteristica care schimbă modul în care scrieți Python
nome, anni = ("Ada", 36)
nome # 'Ada'
anni # 36De asemenea, funcționează fără paranteze (virgula este cea care definește tuplu):
x, y = 10, 20Și permite schimbarea fără o variabilă temporară, un Python pur idiom:
a, b = 1, 2
a, b = b, a
a, b # (2, 1)Despachetarea cu * (odihnă)
Când doriți să capturați „primul și restul” sau „primul, ultimul, mijlocul":
primo, *resto = [1, 2, 3, 4, 5]
primo # 1
resto # [2, 3, 4, 5]
primo, *centro, ultimo = [1, 2, 3, 4, 5]
centro # [2, 3, 4]Aceasta se numește atribuire cu stea: steaua colectează tot ceea ce rămâne într-o listă.
Capcana tuplelor cu un singur element
(42) nu este un tuplu, este numărul 42 din paranteze. A face o
tuplu cu un singur element aveți nevoie de virgula: (42,). Fără el, orice operațiune
eșuează într-un mod confuz.
x = (42)
type(x) # <class 'int'>
x = (42,)
type(x) # <class 'tuple'>Tupluri cu un singur element
Pentru a crea un tuplu care conține un singur element, doar parantezele nu sunt suficiente: trebuie să inserați o virgulă finală, de exemplu t = (42,). Fără virgulă, Python tratează parantezele ca o simplă grupare matematică, creând un întreg simplu 42.
Încearcă
Având în vedere `a = 1` și `b = 2`, schimbați valorile lor într-o singură linie (depachetarea tuplului) și evaluați tuplul (a, b).
Afișează indiciu
a, b = b, a
Soluție disponibilă după 3 încercări
Exercițiu de revizuire
Din lista `voti = [7, 5, 8, 6, 9]`, folosiți despachetarea pentru a extrage prima nota în `primo`, ultima în `ultimo` și pe cele rămase în `centro`. Evaluați `(primo, centro, ultimo)`.
Afișează indiciu
primo, *centro, ultimo = voti → primo=7, centro=[5,8,6], ultimo=9.
Soluție disponibilă după 3 încercări
Provocare suplimentară
Given the tuple `point = (4, 5, 6)`, use unpacking to assign the three values to the variables `x`, `y`, `z` respectively. Then, calculate the sum of `x`, `y`, and `z` and store it in `coord_sum`. Finally, evaluate `coord_sum`.
Afișează indiciu
Utilizați x, y, z = punct pentru a extrage cele trei coordonate într-o singură declarație.
Soluție disponibilă după 3 încercări