Malo igranje sa tupleima

17.1 Malo igranje sa tupleima 

Videli smo da su tuple nepromenljiv tip podataka, a pri tome su i sekvence. Zbog svojih osobina ona mogu postati veoma zgodne za dobijanje nekih rezultata, za koje bi smo, u suprotnom, morali da pišemo složene algoritme. Na primer, možda bi smo mi želeli da nam funkcija vraća dve ili više vrednosti, koje su potpuno različite? Mi to možemo postići vrlo lako, koristeći tuple!
>>> def dve(): 
...     return 'prva', 'druga' 
... 
>>> def tri(): 
...     return 1, 2, 3 
... 
>>> a, b = dve() 
>>> print(a, '\n', b) 
prva 
 druga 
>>> a, b, c = tri() 
>>> print('{}\n{}\n{}'.format(a, b, c)) 
1 
2 
3 
>>> 
Pozivanje funkcije sa pomoću više promenljivih, na primer a, b = <neka funkcija>, se naziva „otpakivanje“ tuple. Ovo se može izvesti samo ukoliko tačno znamo koliko će nam vrednosti funkcija vratiti, u suprotnom:
>>> a, b = tri() 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
ValueError: too many values to unpack (expected 2) 
>>> 
Python je očekivao dve vrednosti, a dobio je tri – greška.
Ali, da li mora da bude? Postoji način i da se ovakva greška izbegne. Mi možemo da dobijemo rezultati koji će izgledati kao (a, <sve ostalo>), i to postižemo tako što koristimo oznaku zvezdice, slično onome što smo radili prilikom definisanja promenljivog broja parametara funkcije: 
>>> a, *b = tri() 
>>> print('{}\n{}'.format(a, b)) 
1 
[2, 3] 
>>> a, *b = [1, 2, 3, 4, 5, 6, 7] 
>>> print('{}\n{}'.format(a, b)) 
1 
[2, 3, 4, 5, 6, 7] 
>>> 
Tuple nam takođe mogu poslužiti za najbrži način zamene vrednosti neke dve (ili više) promenljive:
>>> a, b = b, a 
>>> print('{}\n{}'.format(a, b)) 
[2, 3, 4, 5, 6, 7] 
1 
>>> 
Laganica, zar ne?

17 Malo više i
malo naprednije
Indeks 17.2 Metode koje imaju
specijalna značenja

Primjedbe

Popularno ovog meseca

Gde pronaći novosti sa facebook stranica nakon velike promene koja ga je zadesila?

Dva načina da vratite svoj Windows 10 na fabričke vrednosti

Kako preuzeti video koji je neko postavio na facebook-u bez upotrebe dodatnih programa?

Više neće biti moguć besplatan prelazak na Windows 10

Prijateljski meč ŠK "Titel" - ŠK "Bukovac"

Tu je novi Qt creator 4.4.0!

Kako manipulisati Windows licencom pomoću slmgr komande?

Fake poet

Da li je poželjno biti anoniman na internetu (ili se predstavljati punim imenom i prezimenom)?

Organizacija foldera i fajlova u Linux fajl sistemu