7 min lexim
Tuple-t dhe pandryshueshmëria
Një grup që nuk duhet të ndryshojë
Një tuple është një sekuencë vlerash, shumë e ngjashme me një listë, por shkruhet me kllapa të rrumbullakëta në vend të atyre katrore:
vendndodhja = (41.33, 19.82)
E lexon saktësisht si lexon një listë, me indeks:
print(vendndodhja[0]) # 41.33
print(vendndodhja[1]) # 19.82
Ndryshimi i madh është te vetë titulli i këtij mësimi: një tuple është i pandryshueshëm (immutable). Sapo ekziston, nuk mund t'i shtosh, nuk mund t'i heqësh, dhe nuk mund ta rivendosësh një nga vendet e tij. Të provosh vendndodhja[0] = 42.0 nuk e ndryshon vlerën në heshtje; nxjerr një gabim dhe e ndal programin.
Kjo tingëllon si e metë, por shpesh është pikërisht ajo që do. Një çift koordinatash në hartë, një ngjyrë e kuqe-jeshile-blu, një datë si vit, muaj, ditë: këto janë gjëra të vetme të bëra nga pjesë që shkojnë bashkë dhe duhet të udhëtojnë si një. T'i bësh të pandryshueshme është një premtim se asnjë rresht i mëvonshëm kodi nuk do t'i shkëpusë pa dashje.
Leximi, dhe e vetmja gjë që s'mund ta bësh
Gjithçka që bën për të parë një listë funksionon te një tuple. Mund ta indeksosh, ta presësh në copa, t'i kërkosh gjatësinë dhe të kontrollosh përkatësinë:
java = ("Hën", "Mar", "Mër", "Enj", "Pre")
print(len(java)) # 5
print(java[-1]) # Pre
print("Sht" in java) # False
Ajo që s'mund ta bësh është çdo veprim që do ta modifikonte. Nuk ka .append(), dhe nuk mund të fshish një njësi prej tij. Nëse vërtet të duhet një version i ndryshuar, hapi i ndershëm është të ndërtosh një të ri. Një truk i zakonshëm është ta kthesh në listë, ta ndryshosh atë, dhe ta kthesh mbrapsht:
java_liste = list(java)
java_liste[0] = "E hënë"
java = tuple(java_liste)
Vër re se nuk e mutove tuple-n origjinale; e zëvendësove me një të freskët. Vlera e vjetër nuk ndryshoi kurrë, dhe kjo është e gjithë poenta.
Shpaketimi: nxjerrja e pjesëve jashtë
Tuple-t shkëlqejnë kur i shpërndan pjesët e tyre nëpër emra të veçantë në një rresht. Kjo quhet shpaketim (unpacking):
gjeresia, gjatesia = vendndodhja
print("Veri:", gjeresia)
print("Lindje:", gjatesia)
Numri i emrave në të majtë duhet të përputhet me numrin e vlerave në të djathtë. I njëjti veprim të lejon t'u japësh vlerë disa variablave njëherësh, madje t'i këmbesh dy prej tyre pa një variabël të përkohshme:
a, b = 10, 20
a, b = b, a # tani a është 20 dhe b është 10
Një shembull i punuar: kthimi i më shumë se një vlere
Një funksion mund të return-ojë vetëm një objekt, por nëse e bën atë objekt një tuple, në fakt kthen disa rezultate njëherësh. Le të themi se do edhe sipërfaqen edhe perimetrin e një drejtkëndëshi:
def fakte_drejtkendeshi(gjeresia, gjatesia):
siperfaqja = gjeresia * gjatesia
perimetri = 2 * (gjeresia + gjatesia)
return siperfaqja, perimetri
Rreshti return siperfaqja, perimetri ndërton në heshtje një tuple. Aty ku e thërret, e shpaketon drejt e në dy emra të qartë:
s, p = fakte_drejtkendeshi(4, 6)
print("Sipërfaqja:", s) # Sipërfaqja: 24
print("Perimetri:", p) # Perimetri: 20
Ja pse tuple-t dalin vazhdimisht edhe kur nuk shkruan asnjë kllapë vetë: janë mënyra e natyrshme e Python-it për të thënë "ja disa vlera që shkojnë bashkë".
Këshillë
Zgjidh një tuple kur koleksioni ka një kuptim të ngulitur ku pozicioni ka rëndësi, si (ditë, muaj, vit). Zgjidh një listë kur njësitë vijnë e ikin dhe numri mund të ndryshojë. Forma që zgjedh i thotë lexuesit tjetër se çfarë të presë.
Do ta shohësh të shpjeguar? Ja leksioni i regjistruar i Code for Albania për këtë temë.
Provoje tani
Shkruaj një funksion shuma_dhe_prodhimi(a, b) që kthen edhe shumën edhe prodhimin e dy numrave, pa kllapa pas return. Thirre me 4 dhe 5, shpaketo rezultatin në dy emra në një rresht të vetëm, dhe shtyp secilin. Sapo ktheve dy vlera nëpërmjet një return të vetëm.
Provo veten
- Cila është e vetmja gjë që mund t'i bësh një liste por jo një tuple-je, dhe pse ky kufizim ndonjëherë është i dobishëm e jo bezdisës?
- Një tuple është i pandryshueshëm, e megjithatë truku "ktheje në listë, ndryshoje, ktheje mbrapsht" duket sikur e ndryshon një. Shpjego çfarë i ndodh vërtet tuple-s origjinale.
- Një funksion mbaron me rreshtin
return emri, mosha, qyteti. Pa asnjë kllapë, çfarë lloj objekti i kthehet thirrësit, dhe si do t'i merrje të tria vlerat në një rresht?
Nga vjen ky mësim
Ndërtuar mbi
- Data Structures and Algorithms
- Për të lexuar më tej: Brian Heinold, A Practical Introduction to Python Programming
Kurset e alphaPlan ndërtohen mbi programe të zhvilluara në klasë, e nuk shpiken për web-in. Kur një pohim mbështetet mbi një standard të jashtëm ose mbi një rast të raportuar, ai emërtohet më sipër që ta kontrollosh vetë e të mos na besosh në fjalë.
Ky kurs u zhvillua nga alphaPlan Center mbi bazën e programeve të realizuara në partneritet me rrjetin American Corners.
Gjete diçka të paqartë, të vjetruar ose që mund të përmirësohet? Sugjero një përmirësim