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 zmení a konečne aj my začneme vytvárať svoje vlastné funkcie.
Funkcia je pomenovaný blok kódu, ktorý môžeš opakovane spustiť ("zavolať"). 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 tento 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
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.
Funkcia musí byť zadefinovaná skôr, než ju program vykoná (zavolá). Ak sa ju pokúsiš zavolať pred jej definíciou, 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()
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ž stretli 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, definovaná v hlavičke funkcie. Pri každom volaní obsahuje hodnotu argumentu. "Miška", "Martin"
a "Saša" sú argumenty - hodnoty, ktoré
funkcia dostane pri zavolaní.
Parametre vs. argumenty
- Parameter = premenná definovaná v hlavičke funkcie, ktorá reprezentuje vstupnú hodnotu.
- Argument = konkrétna hodnota, ktorá sa funkcii odovzdá pri 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á definovaná v hlavičke funkcie. Argument je hodnota, ktorú funkcii odovzdávame pri jej volaní.
- Telo funkcie musí byť odsadené.
pozdrav() s jedným parametrom meno.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“.
function
func
def
define
povolenie bolo False?
def pozdrav():
print("Ahoj!")
if povolenie:
pozdrav()
pozdrav()
pozdrav()
povolenie je False, tak sa blok kódu podmienky nevykoná. Posledné volanie funkcie nie je v v tejto podmienke, tým pádom sa ako jediné vykoná.
def vypis(text):
print(">> " + text)
vypis("Python")
def
def predstav_sa(meno, vek):
print(meno + " má " + str(vek) + " rokov.")
predstav_sa("Anna", 25)
predstav_sa("Karolína")
predstav_sa("Tomáš", 30)
predstav_sa(25, "Saša")
vek. 4. možnosť síce nevyhodí chybu hneď, ale print zlyhá, pretože poradie je obrátené - str + int sa nedá zreťaziť.