Lekcie
Funkcie I. - upratovanie a recyklácia kódu
Programovanie je o efektivite. Naučíš sa baliť kód do blokov, ktoré môžeš kedykoľvek zavolať znovu bez kopírovania.
Čo je to funkcia?
Ak sa pozrieš späť na to, čo sme sa doteraz naučili, zistíš, že sme celý čas funkcie používali. Napríklad print(), input(), int(), len(), type() alebo append(), toto všetko sú funkcie. My sme ich len volali, ale niekto ich musel najprv naprogramovať. Teraz sa to otočí a konečne aj my začneme vytvárať svoje vlastné funkcie.
Funkcia je pomenovaný blok kódu, ktorý môžeš spustiť ("zavolať") kedykoľvek chceš. Kedykoľvek, z rôznych miest v programe. Hlavná výhoda je, že kód nemusíš kopírovať. Napíšeš ho raz a použiješ ho kdekoľvek.
Predstav si, že máš veľký program a na viacerých miestach potrebuješ spraviť ten istý výpočet. Bez funkcie by si ten kód musel kopírovať. S funkciou ho napíšeš raz a kdekoľvek ho potrebuješ, len ho zavoláš. Takýto kód je prehľadnejší, kratší a ľahšie sa v ňom hľadajú chyby.
Definícia vlastnej funkcie
Vlastnú funkciu definujeme pomocou kľúčového slova def. Zápis vyzerá takto:
def nazov_funkcie():
# Kód, ktorý sa vykoná pri zavolaní funkcie
Na prvom riadku napíšeme def, za ním názov funkcie a zátvorky () s dvojbodkou. Na ďalšom riadku, ktorý musí byť odsadený (rovnako ako pri podmienkach a cykloch), napíšeme samotný kód funkcie.
Pozrime sa na jednoduchý príklad - funkciu, ktorá vypíše pozdrav:
def pozdrav():
print("Ahoj!")
pozdrav() # zavolanie funkcie
Všimni si, že funkcia sama od seba nič nerobí, pokým ju nezavoláš. Volanie funkcie vyzerá rovnako ako pri print() - napíšeš jej názov a zátvorky.
Funkciu musíš najprv zadefinovať (def) a až potom ju môžeš volať. Ak sa pokúsiš zavolať funkciu skôr, ako si ju zadefinoval, Python vyhodí chybu NameError!
Volanie funkcie viackrát
Jedna z hlavných výhod funkcií je, že ich môžeš volať koľkokrát chceš. Kód vo vnútri funkcie sa vykoná pri každom volaní:
def pozdrav():
print("Ahoj!")
pozdrav()
pozdrav()
pozdrav()
# Vypíše:
# Ahoj!
# Ahoj!
# Ahoj!
Bez funkcie by si musel print("Ahoj!") napísať trikrát. S funkciou stačí napísať pozdrav() - a ak by si neskôr chcel text zmeniť, stačí zmeniť len jeden riadok vo vnútri funkcie.
Parametre – posielanie dát funkciám
Čo ak chceme, aby funkcia vedela pracovať s rôznymi hodnotami? Na to slúžia parametre.
Parameter je premenná, ktorú zadefinujeme v zátvorkách pri definícii funkcie. Keď funkciu zavoláme, pošleme jej konkrétnu hodnotu - tá sa nazýva argument. S parametrami sme sa už streli napríklad pri funkciách ako print(), len() alebo input().
Pozrime sa na príklad:
def pozdrav(meno):
print("Ahoj, " + meno + "!")
pozdrav("Miška") # Ahoj, Miška!
pozdrav("Martin") # Ahoj, Martin!
pozdrav("Saša") # Ahoj, Saša!
Premenná meno je parameter - existuje len vo vnútri funkcie a pri každom volaní obsahuje hodnotu, ktorú sme poslali. "Miška", "Martin" a "Saša" sú argumenty - hodnoty, ktoré funkcia dostane pri zavolaní.
Parametre vs. argumenty
- Parameter = názov premennej, ktorú zadefinujeme vo funkcii pri jej definícii.
- Argument = konkrétna hodnota, ktorú funkcii posielame pri jej volaní.
Funkcia s viacerými parametrami
Funkcia môže mať aj viac parametrov, oddelíme ich čiarkou. Poradie parametrov musí zodpovedať poradiu argumentov pri volaní.
def predstav_sa(meno, vek):
print("Volám sa " + meno + " a mám " + str(vek) + " rokov.")
predstav_sa("Karolína", 22)
predstav_sa("Tomáš", 35)
Všimni si, že parameter vek je dátového typu int, preto ho pri zreťazení pretypujeme pomocou str().
Prehľad syntaxe funkcie
| Časť | Príklad | Vysvetlenie |
|---|---|---|
| def | def pozdrav(): | Kľúčové slovo na definíciu funkcie. |
| Názov funkcie | pozdrav | snake_case, rovnaké pravidlá ako pre premenné. |
| Parametre | (meno, vek) | Voliteľné, môžu byť aj prázdne (). |
| Volanie funkcie | pozdrav("Miška") | Spustí kód vo vnútri funkcie. |
Zopakuj si!
- Funkcia je pomenovaný blok kódu, ktorý môžeš kedykoľvek zavolať.
- Funkciu definujeme pomocou kľúčového slova def.
- Parameter je premenná vo vnútri funkcie - argument je hodnota, ktorú funkcii posielame pri volaní.
- Telo funkcie musí byť odsadené.
Funkcia má za úlohu vypísať do konzoly "Ahoj, X!", kde namiesto X je použitá hodnota parametru meno.
Následne funkciu zavolaj trikrát. Prvýkrát s argumentom „Jano“, potom s argumentom „Alex“ a nakoniec s menom „Nikola“.
def pozdrav():
print("Ahoj!")
if povolenie:
pozdrav()
pozdrav()
pozdrav()
def vypis(text):
print(">> " + text)
vypis("Python")
def predstav_sa(meno, vek):
print(meno + " má " + str(vek) + " rokov.")