Funkcija je blok organizirane kode za večkratno uporabo, ki se uporablja
za izvedbo nekega povezanega dejanja. Funkcije zagotavljajo našemu
programu boljšo modularnost in visoko stopnjo ponovne uporabe
kode.
Kot že vemo, Python nudi veliko vgrajenih funkcij, kot so print (), itd.,
Vendar lahko ustvarimo tudi svoje funkcije. Tem funkcijam pravimo
uporabniško definirane funkcije.
Definiranje nove funkcije terja določeno obliko.
Funkcijski bloki se začnejo s ključno besedo def, ki ji sledi ime
funkcije in oklepaji (()).
Sintaksa
def imeFunkcije (parametri):
"opisFunkcije"
telo funkcije
return [izraz]
Za imenom funkcije sledijo oklepaji, v katerih so navedeni parametri
(argumenti) funkcije. Temu sledi dvopičje.
Imenu lahko (neobvezno) sledi v navednicah opis funkcije.
Telo funkcije je zamaknjeno. V telesu imamo (ne nujno) tudi stavek return.
Ta pomeni povratek na klicatelja. Stavek return ima lahko tudi v oglatih
oklepajih izraz, ki ga vrača klicatelju (ni pa to obvezno)
Vrstni red morebitnih parametrov mora biti enak tako v definiciji funkcije
kot pri njeni uporabi.
Primer definiranja funkcije:
Naslednja funkcija bo izračunala vsoto dveh števil, navedenih kot vhodna
parametra, in vrnila rezultat:
def vsota (x,y): "funkcija izracuna vsoto" rezultat = x + y return [rezultat] |
Z definicijo funkcije smo podali njeno ime, navedli vhodne parametre in v telesu funkcije zapisali kodo. Ko enkrat funkcijo definiramo, jo lahko (tudi večkrat) pokličemo v našem programu.
Za naš primer poglejmo sedaj celoten program in ga preizkusimo:
To pomeni, da je do lokalnih spremenljivk mogoče dostopati samo znotraj funkcije, v kateri so deklarirane, do globalnih spremenljivk pa lahko dostopamo po celotnem telesu programa in pri vseh funkcijah. Pri klicu neke funkcije so spremenljivke, ki so deklarirane znotraj nje, uvedejo v njen lokalni doseg.
Poglejmo preprost primer:
Globalna in lokalna spremenljivka imata isto ime, a očitno drugo vrednost. Sprememba lokalne spremenljivke ni pomenila spremembe globalne.
Zveni nekoliko komplicirano: Dejansko dobi funkcija kopijo parametra. In če to kopijo spremeni, se originalna vrednost v klicanem programu ne spremeni. To lahko hitro preverimo z naslednjim primerom:
Razlaga: Funkciji smo posredovali vrednost stevila (ki je enaka 4).
Funkcija je svojo kopijo tega podatka spremenila v 5 . Originalna
vrednost pa se ni spremenila.
Imena drugih podatkovnih struktur (kot so na primer zaporedja ipd) pa so dejansko naslovi, kje se te strukture nahajajo v računalniku. Če v kličoči funkciji podamo tako ime, ji dejansko posredujemo naslov (temu rečemo referenco). To pomeni, da funkcija dobi kopijo naslova, kje se podatki dejansko nahajajo. In če ta vrednosti na tem naslovu spremenimo v funkciji, se sprememba odraža tudi v kličočem programu.
Poglejmo primer:
Komentar: Tako imena kot njegova kopija seznamImen kažeta na iste podatke. Zato sprememba teh podatkov v klicani funkciji pomeni dejansko spremembo originalnih podatkov.
Funkcijo lahko pokličete z uporabo naslednjih vrst formalnih argumentov :
Zahtevani argumenti so argumenti, ki morajo biti posredovani funkciji v pravilnem vrstnem redu. Število argumentov v funkcijskem klicu se mora natančno ujemati z definicijo funkcije.
Pomembnost števila in vrstnega reda zahtevanih parametrov je razvidna iz naslednjega primera:
Ta prijem omogoča, da klicatelj označi argumente kar z imenom argumenta,
uporabljenim v definiciji funkcije. To omogoča, da Pythonov tolmač
ugotovi, za kateri argument gre, kar po ključnih besedah argumentov,
podanih v definiciji funkcije. Tako lahko pri klicu funkcije pomešamo
vrstni red argumentov (parametrov).
Privzeti argument je argument, ki že v definiciji funkcije podaja privzeto vrednost za primer da ta vrednost ni navedena v klicu funkcije za ta argument.
Naslednji primer ponazarja odejo o privzetih argumentih, saj funckija uporabi privzeto starost, če ni ta ni podana v klicu
Pri programiranju se včasih ne zavedamo vseh možnih primerov uporabe naše kode pa vendar želimo bodočim uporabnikom ponuditi več možnosti. Uporabimo lahko idejo, znano pri nekaterih drugih programskih jezikih, da argumente podajamo v seznamu (ki je pri klicu funkcije lahko različne dolžine).
* args z eno zvezdico uporabimo pri definiciji funkcije kot parameter za
posredovanje seznama argumentov spremenljive dolžine.
Primer:
Anonimne funkcije niso deklarirane na standardni način z uporabo ključne besede def. Ustvarimo jih s ključno besedo ključno besedo lambda.
Take funkcije lahko sprejmejo poljubno število argumentov, vendar vrnejo samo eno vrednost v obliki izraza.
Lambda funkcije imajo svoj lokalni imenski prostor in ne morejo dostopati do spremenljivk, razen tistih v seznamu parametrov in tistih v globalnem imenskem prostoru.
lambda funkcije imajo naslednjo formalno obliko:
lambda [arg1 [, arg2, ..... argn]]: izraz |
Primer lambda funkcije in njene uporabe: