Viimaseks vaatame funktsioone. Funktsioon lubab meil panna arvuti tegema keerulisemaid operatsioone kui lihtsalt millegi liitmine või lahutamine, hoides samal ajal koodi arusaadava ja loetavana.
Funktsioonist võib mõelda kui mustast kastist, mis teeb midagi. Mõnikord on võimalik funktsioonile anda mingit sisendit (üks või rohkem) ja mõnikord annab funktsioon pärast töö lõpetamist midagi ka välja.
Funktsiooni tunneb Pythonis ära selle järgi, et tal on nimi (nagu muutujal), millele järgnevad kohe sulud ( ja ). Mõnikord on sulgude vahel midagi kirjas, mõnikord mitte: sinna vahele kirjutatakse funktsiooni sisendid (kui neid on).
Näiteks võime vaadata väga lihtsat (väljamõeldud) funktsiooni liida_kolm_arvu:
liida_kolm_arvu(3, 5, 11)
See funktsioon võtab kolm sisendit (hetkel on talle ette antud arvud 3, 5 ja 11) ning võiks nime järgi välja anda nende kolme arvu summa (19). Ülalolevat rida nimetatakse funktsiooni väljakutseks. Hetkel võime tahta tulemusega hiljem ka midagi teha: kui funktsioon midagi “välja annab” (väärtuse tagastab), siis saame selle salvestada muutujasse:
meie_summa = liida_kolm_arvu(3, 5, 11)
Siin pannakse funktsiooni tagastatav väärtus muutujasse meie_summa.
Funktsiooni liida_kolm_arvu pole aga vaikimisi tegelikult olemas (kuigi paljud teised funktsioonid on). Funktsiooni saame ise luua sõnaga def ja sobiva taandega järgmiselt:
def liida_kolm_arvu(a, b, c):
summa = a + b + c
return summa
See koodijupp loob (defineerib) funktsiooni liida_kolm_arvu (aga ei kutsu seda välja) ehk annab arvutile juhised, mida selle funktsiooni väljakutse puhul teha. Funktsioonil on kolm sisendit: sisendiks antu pannakse kolme muutujasse, nimedega vastavalt a, b ja c (seda tehakse funktsiooni väljakutsel automaatselt – arvuti oskab sisendiks antud kolm arvu järjekorras kokku viia muutujatega a, b ja c). Seejärel liidetakse need kolm arvu kokku ja pannakse tulemus muutujasse summa. Lõpuks annab käsk return teada, et funktsioon peaks tagastama leitud summa.
(Vahemärkusena: muutujaid a, b, c ja summa väljaspool funktsiooni väljakutset sel juhul enam olemas ei ole – nad luuakse ainult selleks ajaks ja selles kohas.)
Nüüd saab seda funktsiooni päriselt kasutada. Kokku näeks tüüpiline kood välja näiteks selline:
def liida_kolm_arvu(a, b, c):
summa = a + b + c
return summa
meie_arvude_summa = liida_kolm_arvu(3, 5, 11)
rospy.loginfo(meie_arvude_summa)
See kood defineerib kõigepealt kolme arvu kokkuliitmise funktsiooni, siis kutsub seda välja arvudega 3, 5 ja 11, paneb tulemuse muutujasse meie_arvude_summa ning kutsub seejärel välja veel üht funktsiooni rospy.loginfo (täpsemini funktsiooni loginfo moodulist rospy), millele annab sisendiks meie_arvude_summa (mis praegu on 19). See viimane funktsioon on ROSis juba olemas (koodi alguses tuleb küll see importida – näeme hiljem, kuidas seda päriselt teha) ja see funktsioon kuvab meie arvude summa terminalis, kus vastav ROSi kood käivitati.
(Kui kasutada midagi muud, kui ROSi, siis on kõige tüüpilisemaks info kuvamise meetodiks funktsioon print, mis töötab samamoodi.)
Funktsioonide kohta saad rohkem lugeda näiteks siit: https://courses.cs.ut.ee/2023/progmaa/spring/Main/PARTVIIFunktsioon1