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 |
0 Коментари
Pokažite nam šta mislite o ovome!