Pozivanje funkcija pomoću ključnih reči argumenata

9.5 Pozivanje funkcija pomoću ključnih reči argumenata

Zbog ovog poslednjeg problema na koji se može naleteti, a sasvim logičan, sledeće što treba da ti pokažem je kako se funkcija poziva sa argumentima koji su ključne reči povezane sa željenom vrednošću. Ako imaš neku funkciju definisanu sa mnogo parametara, a pri tom, želiš da definišeš samo neke od njih, onda, slično definisanju podrazumevanih argumenata, možeš da prosleđuješ vrednosti za te parametre, tako što ih imenuješ prilikom poziva funkcije. Poenta je da koristimo ime (ključnu reč) prilikom poziva funkcije, umesto pozicije argumenta, što smo koristili sve do sad.
Samim ti mi dobijamo dve dodatne prednosti nad prethodnim načinom - prva je ta, da je korišćenje i pozivanje funkcija mnogo lakše, jer više ne moramo da brinemo o redosledu i poziciji argumenata. Druga je ta da možemo proslediti funkciji samo vrednosti onih parametara, koje mi želimo, ali pod uslovom da smo ostalim parametrima definisali podrazumevane vrednosti.
Iako opet zvuči konfuzno, primer će ti pokazati da to baš i nije tako.
>>> def kuma(a, b, c): 
...     print('Moja kuma je', a,'.') 
...     print('Tvoja kuma je', b,'.') 
...     print('Njena kuma je', c, '.') 
... 
>>> kuma('Mira', "Sanja", 'Maja') 
Moja kuma je Mira . 
Tvoja kuma je Sanja . 
Njena kuma je Maja . 
>>> kuma(c = 'Mira', a = "Sanja", b = 'Maja') 
Moja kuma je Sanja . 
Tvoja kuma je Maja . 
Njena kuma je Mira . 
>>> 
Vidimo da više ne moramo da brinemo o redosledu argumenata, već samo pozovemo ključne reči (nazive parametara) i, u zavisnosti od njih dobijamo željeni rezultat. A ako želimo da se ne mučimo baš toliko?
Ajde prvo da analiziramo nešto....
>>> help(print) 
print(...) 
    print(value, ..., sep=' ', end='\n', file=sys.stdout) 
    
    Prints the values to a stream, or to sys.stdout by default. 
    Optional keyword arguments: 
    file: a file-like object (stream); defaults to the current sys.stdout. 
    sep:  string inserted between values, default a space. 
    end:  string appended after the last value, default a newline. 
Pozivanjem help-a za print() funkciju vidimo da za nju možemo da koristimo i argumente tipa sep, end i file. Zapravo, prilikom njene upotrebe mi možemo, ali i nemoramo da pozovemo bilo koji od tih parametara... Hajde da napravimo i mi nešto slično...
>>> def rod(a, b = 'Mira', c = 'Maja'): 
...     print(a, 'mi je', b) 
...     print(a, 'ti je', c) 
... 
>>> rod('Majka') 
Majka mi je Mira 
Majka ti je Maja 
>>> rod('Majka', b = 'Kata') 
Majka mi je Kata 
Majka ti je Maja 
>>> rod(b = 'Sanja', c = 'Lepa', a = 'Ljubavnica') 
Ljubavnica mi je Sanja 
Ljubavnica ti je Lepa 
>>> rod(c = 'Smilja', a = 'Sekretarica') 
Sekretarica mi je Mira 
Sekretarica ti je Smilja 
>>> 
Funkcija koju sam nazvao rod ima jedan parametar bez definisane podrazumevane vrednosti, i dva parametra sa definisanim podrazumevanim vrednostima. 
Kada sam pozivao funkciju, upotrebljavao sam ključne reči, i zato nisam morao da brinem kojim redosledon slažem argumente (c sam stavio pre a i b, b sam stavio pre c i a itd). Napravi sebi par primera i izvežbaj ovo kako bi ti ušlo u prste.

9.4 Definisanje
podrazumevanih argumenata
Indeks 9.6 VarArgs

Primjedbe

Popularno

Kako televizija štetno utiče na Vaše zdravlje finansije?

Da li je TV kviz Slagalica "prevara"?

Tu je novi Qt creator 4.4.0!

Kada prijatelji odlaze

Microsoft objavio - nova verzija Windowsa stiže...

Sitnije promene na blogu...

Opet su se pojavili lažni kuponi brenda "IDEA" na društvenim mrežama

Poslednji pozdrav izgubljenom vremenu

Sistemska greška

Fake poet