Funkcie by boli menej užitočné, keby vždy robili presne to isté. Parametre umožňujú funkcii pracovať s rôznymi hodnotami pri každom volaní — rovnako ako výpočet obvodu obdĺžnika funguje pre akékoľvek rozmery.
Parametre verzus argumenty
Tieto dva pojmy sú príbuzné, ale odlišné:
- Parameter — premenná v definícii funkcie (čo funkcia čaká).
- Argument — skutočná hodnota, ktorú odovzdáš pri volaní funkcie.
def pozdrav(meno): # meno je PARAMETER
print(f"Ahoj, {meno}!")
pozdrav("Zuzana") # "Zuzana" je ARGUMENT
pozdrav("Martin") # "Martin" je ARGUMENT
Viac parametrov
Funkcia môže mať viacero parametrov oddelených čiarkami:
def vypocitaj_obvod(dlzka, sirka):
obvod = 2 * (dlzka + sirka)
print(f"Obvod: {obvod} cm")
vypocitaj_obvod(5, 3) # dlzka=5, sirka=3 → Obvod: 16 cm
vypocitaj_obvod(10, 4) # dlzka=10, sirka=4 → Obvod: 28 cm
Pri volaní funkcie Python priraďuje argumenty k parametrom v poradí — prvý argument ide do prvého parametra, druhý do druhého atď. Toto sa nazýva poziční argumenty.
Pomenované argumenty
Môžeš argumenty zadať aj s názvom parametra — potom na poradí nezáleží:
def predstav_sa(meno, vek, mesto):
print(f"Volám sa {meno}, mám {vek} rokov a bývam v {mesto}.")
predstav_sa(vek=14, mesto="Bratislava", meno="Peter")
Pomenované argumenty robia volania dlhých funkcií čitateľnejšími.
Predvolené hodnoty parametrov
Parameter môže mať predvolenú hodnotu, ktorá sa použije, ak argument nie je zadaný:
def pozdrav(meno, pozdrav="Ahoj"):
print(f"{pozdrav}, {meno}!")
pozdrav("Eva") # Ahoj, Eva!
pozdrav("Eva", "Dobrý deň") # Dobrý deň, Eva!
Parametre s predvolenými hodnotami musia byť vždy za parametrami bez predvolených hodnôt. Python by inak nevedel, ktoré argumenty sú povinné.
Premenlivý počet argumentov (*args)
Niekedy nevieš vopred, koľko argumentov funkcia dostane:
def spocitaj(*cisla):
sucet = 0
for c in cisla:
sucet += c
return sucet
print(spocitaj(1, 2, 3)) # 6
print(spocitaj(10, 20, 30, 40)) # 100
Hviezdička * pred názvom parametra hovorí Pythonu: "zozbieraj všetky argumenty do n-tice."
Parametre ako lokálne premenné
Parametre sú lokálne premenné funkcie — existujú len počas jej behu:
def zdvojnasob(x):
x = x * 2 # mení lokálnu kópiu
print(x)
cislo = 5
zdvojnasob(cislo)
print(cislo) # stále 5 — originál sa nezmenil
Keď odovzdáš číslo alebo reťazec do funkcie, funkcia dostane kópiu hodnoty. Zmena parametra vo funkcii nezmení pôvodnú premennú. (Pri zoznamoch a objektoch je to iné — tie sa odovzdávajú odkazom.)
Cvičné príklady
Aký je rozdiel medzi parametrom a argumentom? Uveď príklad.
Zobraziť odpoveď
Čo vypíše tento kód? def uvitaj(meno, titul='Žiak'): print(f'{titul} {meno}'); uvitaj('Novák'); uvitaj('Horváth', 'Profesor')