IV OSA sisukord |
4.4 FUNKTSIOON JA MUTEERIMINE
Järjenditega tegutsemiseks on erinevad funktsioone ja muidugi saame neid juurde luua. Funktsioon ja järjend saavad olla seotud mitmel moel. Enamasti on Pythonis juba olemasolevad järjendite funktsioonid seotavad järjendiga punkti abil, nt
jarjend.append() jarjend.insert() jarjend.count() jarjend.copy() jarjend.reverse() jarjend.sort() jarjend.clear()
Selliseid funktsioone nimetatakse meetoditeks. Tegemist on objektorienteeritud lähenemisega, millest on juttu ka selle nädala silmaringimaterjalis.
Meie aga loome funktsioone, kus järjend antakse ette argumendina. Ükskõik kuidas järjendiga seos korraldatud on, tuleb silmas pidada, kas see järjend ise funktsiooni töö jooksul muutub või mitte.
Koostame kaks funktsiooni, mis nagu teeksid sama asja, aga ühel juhul argumendina antud järjend muutub ja teisel mitte.
Olgu ülesandeks argumendina antud järjendi elementide nullimine. Esialgu teeme sellise funktsiooni, mis muudab argumendina antud järjendit.
def muuda_nullideks(jarj): for i in range(len(jarj)): jarj[i] = 0 jarjend = [2, 5, -2, 4] muuda_nullideks(jarjend) print(jarjend)
Kui vaatame, mis väärtuse see funktsioon tagastab, ja mis tüüpi see väärtus on, siis saame:
print(muuda_nullideks(jarjend)) print(type(muuda_nullideks(jarjend)))
mis annab tulemuse
None <class 'NoneType'>
Niisiis ei tagastata funktsioon nagu midagi - None
just seda märgibki. Kui nüüd tahaksime selle funktsiooni väärtuse uuele muutujale anda, siis saab sellegi väärtuseks None
. Sellise funktsiooni puhul ongi olulisem see n-ö kõrvalefekt, milleks on antud juhul järjendi muutmine.
Teeme nüüd funktsiooni, mis tagastaks vastava nullitud järjendi ja argumendina antud järjendit ei muudaks:
def tagasta_nulliline(järj): uus_järj = [] for i in range(len(järj)): uus_järj.append(0) return uus_järj järjend2 = [4, -5, 2, 3] print(tagasta_nulliline(järjend2)) print(järjend2)
Nüüd saame ka funktsiooni rakenduse väärtuse uuele muutujale anda:
uus_järjend = tagasta_nulliline(järjend2)
Saab koostada ka funktsiooni, mis nii muudab argumenti, kui ka tagastab väärtuse. See võib aga olla murede allikaks. Kui funktsiooni kasutamisel ei teadvustata, et argument muutub ja seda kasutatakse ka edaspidi, siis võib see kõrvalefekt põhjustada raskestiavastatavaid vigu.
def muuda_nullideks_tagasta(järj): for i in range(len(järj)): järj[i] = 0 return järj järjend3 = [7, -3, -1, 6] print(muuda_nullideks_tagasta(järjend3)) print(järjend3)
Laiendame neid programme kahemõõtmelise järjendi juhule.
def muuda_nullideks2D(jär2d): for i in range(len(jär2d)): for j in range(len(jär2d[i])): jär2d[i][j] = 0 tabel = [[1, 5, 6], [-5, 7, 2]] muuda_nullideks2D(tabel) print(tabel) def tagasta_nulliline2D(jär2d): uus_jär2d = [] for i in range(len(jär2d)): uus_rida = [] for j in range(len(jär2d[i])): uus_rida.append(0) uus_jär2d.append(uus_rida) return uus_jär2d tabel2 = [[-1, 2, 3], [5, -1, 3]] print(tagasta_nulliline2D(tabel2)) print(tabel2)
IV OSA sisukord |