Funkcia je pomenovaný blok príkazov (niekedy sa tomu hovorí aj podprogram). Popisujeme (definujeme) ju špeciálnou konštrukciou:
def meno_funkcie(): # zapamätaj si blok príkazov ako nový príkaz
prikaz
prikaz
...
Keď zapíšeme definíciu funkcie, zatiaľ sa z bloku príkazov (hovoríme tomu telo funkcie) nič nevykoná. Táto definícia sa „len“ zapamätá a jej referencia sa priradí k zadanému menu – vlastne sa do premennej meno_funkcie
priradí referencia na telo funkcie. Je to podobné tomu, ako sa priraďovacím príkazom do premennej priradí hodnota z pravej strany príkazu.
def vypis_python():
print("mám rád")
print("python")
Zadefinovali sme si funkciu, ale zatiaľ sa nič neudeje. Daná funkcia sa len načíta do programu. Ak chceme funkciu zavolať zapíšeme to takto:
def vypis_python():
print("mám rád")
print("python")
vypis_python()
print("ešte raz")
vypis_python()
Python načíta do pamäte celú funkciu, následne ju vie zavolať aj viac krát. Pomedzi môžeme spúšťať iné funkcie, ale iné príkazy.
Tým že vytvoríme funkciu napríklad s názvom vypis_python, vytvoríme vlastne referenciu na túto funkciu. Je to podobné ako keď referencujeme na premennú. Pozor keď chceme vytvorenú funkciu spustiť, musíme ju zavolať so zátvorkami! Samozrejme vždy je potrebné ju najprv zadefinovať.
Parametre funkcie
Parametrom funkcie je dočasná premenná, ktorá vzniká pri volaní funkcie a prostredníctvom ktorej, môžeme do funkcie poslať nejakú hodnotu. Parametre funkcií definujeme počas definovania funkcie v hlavičke funkcie a ak ich je viac, oddeľujeme ich čiarkami:
def vypis_text(text):
print("************")
print(text)
print("************")
vypis_text("python")
************
python
************
# parametrov môže byť aj viac
def vypis_text(text, pocet):
print("*" * pocet)
print(text)
print("*" * pocet)
vypis_text("python", 10)
**********
python
**********
Pri definovaní funkcie v hlavičke funkcie uvádzame tzv. formálne parametre: sú to nové premenné, ktoré vzniknú až pri volaní funkcie. Pri volaní funkcie musíme do zátvoriek zapísať hodnoty, ktoré sa stanú tzv. skutočnými parametrami: tieto hodnoty sa pri volaní priradia do formálnych parametrov.
def vypis_text(text, pocet):
print("*" * pocet)
print(text)
print("*" * pocet)
x, meno = 4, "python"
pocet_hviezdiciek = x * 3
vypis_text(meno, pocet_hviezdiciek)
pocet_hviezdiciek = pocet_hviezdiciek - 3
vypis_text("python", pocet_hviezdiciek)
Ako to funguje. Do pamäte sa načíta funkcia vypis_text(), do premennej x a meno sa priradí hodnota. Následne sa vyhodnotí a priradí premenná pocet_hviezdiciek. Zapamätá sa návratová adresa volania (riadok č.9), vytvoria sa dve nové premenné meno
a pocet_hviezdiciek
(formálne parametre) a priradia sa do nej hodnoty skutočných parametrov text
a pocet
(prvé volanie funkcie). Následne sa vykonajú všetky príkazy vo funkcii, zrušia sa premenné a program sa vráti na zapamätané miesto a pokračuje vo vykonávaní príkazov.