Naučíte sa:
- Funkcie v jazyku Python
- Predvolené (default) argumenty
- Šablóny reťazcov - f string
Prečítajte si
Vypracujte úlohu
Predstavte si, že pracujete v malej pekárni so sviatočnou ponukou: dva koláčiky dostanete za cenu jedného. Jeden z nich sa rozhodnete darovať ďalšej osobe v rade. Keď poznáte jej meno, poviete:
„Jeden pre Janka, jeden pre mňa.“
Samozrejme, nechcete tú istú vetu opakovať ručne pri každom zákazníkovi. Preto si vytvoríte malý stroj, ktorý to urobí za vás. V Pythone sa takýto stroj nazýva funkcia..
Funkcia je jednoducho znovupoužiteľný kus programu. Keď ju raz vytvoríte, môžete ju zavolať vždy, keď ju budete potrebovať.
def two_fer():
return "Jeden pre teba, jeden pre mňa."
print(two_fer())
Na prvý pohľad sa ani nezdá, že ide o programátorskú úlohu. Celé riešenie sa zmestí na jediný riadok. Napriek tomu sa v tejto malej úlohe skrýva niekoľko dôležitých konceptov jazyka Python. Pri jej riešení sa naučíte, čo sú funkcie, ako fungujú argumenty a parametre funkcií, ako predvolené hodnoty robia funkcie flexibilnejšími a prečo Python programátori radi používajú f-stringy.
Takýto stroj však zakaždým vráti rovnakú vetu. To funguje dovtedy, kým sa prvý zákazník nepredstaví.
Vašim cieľom je napísať funkciu two_fer, ktorá vráti vetu:
Jeden pre Janka, jeden pre mňa.
ak je zadané meno, a
Jeden pre teba, jeden pre mňa.
ak meno zadané nie je. Meno osoby zadávame v tvare, ktorý sa hodí do vety, napríklad Janka, Marienku alebo Ferka.
Do pekárne vojde Janka. Stroj už nemá hovoriť „teba“, ale „Janka“. Funkcia teda musí dostať informáciu z vonkajšieho sveta. Presne na to slúžia argumenty funkcie.
def two_fer(name):
return f"Jeden pre {name}, jeden pre mňa."
Premenná uvedená v zátvorkách pri definovaní funkcie sa nazýva parameter. Môžete si ju predstaviť ako prázdne miesto, ktoré čaká na vyplnenie. Keď funkciu zavoláte,
two_fer("Janka")
hodnota "Janka" sa vloží do tohto miesta. Táto hodnota sa nazýva argument.
Rozdiel medzi nimi je síce malý, ale dôležitý. Parameter patrí k definícii funkcie, zatiaľ čo argument je konkrétna hodnota, ktorú funkcii odovzdáte pri jej volaní. Predstavte si parameter ako prázdne políčko vo formulári a argument ako údaj, ktorý doň používateľ zapíše.
Vďaka tomu je funkcia oveľa flexibilnejšia. Už nepozná iba jednu vetu, ale dokáže vytvoriť nekonečne veľa rôznych viet.
two_fer("Janka")
vráti
Jeden pre Janka, jeden pre mňa.
a
two_fer("Marienku")
vráti
Jeden pre Marienku, jeden pre mňa.
Všetko funguje výborne, až kým si niekto nevezme koláč bez toho, aby povedal svoje meno.
Čo by sa malo stať v takom prípade?
Ak zavoláte funkciu bez argumentu,
two_fer()
Python oznámi chybu, pretože funkcia očakáva jeden argument, ale žiadny nedostala.
Našťastie Python umožňuje definovať predvolenú hodnotu parametra.
def two_fer(name="teba"):
return f"Jeden pre {name}, jeden pre mňa."
Teraz sa funkcia správa správne v oboch situáciách. Ak pri volaní zadáte meno, Python použije práve toto meno. Ak meno nezadáte, automaticky použije hodnotu "teba".
two_fer("Janka")
vráti
Jeden pre Janka, jeden pre mňa.
zatiaľ čo
two_fer()
vráti
Jeden pre teba, jeden pre mňa.
Predvolené hodnoty parametrov patria medzi veľmi užitočné vlastnosti Pythonu. Umožňujú navrhovať funkcie, ktoré sa jednoducho používajú v bežných situáciách, pričom stále zostávajú dostatočne flexibilné aj pre zložitejšie prípady.
Teraz sa oplatí pozrieť bližšie na spôsob, akým funkcia vytvára výslednú vetu.
f"Jeden pre {name}, jeden pre mňa."
Malé písmeno f na začiatku označuje formátovaný reťazec, často nazývaný aj f-string. Všetko, čo sa nachádza medzi zloženými zátvorkami {}, Python vyhodnotí a vloží priamo do výsledného textu.
Napríklad
name = "Alice"
print(f"Hello, {name}!")
vypíše
Hello, Alice!
Vo vnútri zložených zátvoriek nemusia byť iba premenné. Môžu tam byť aj výrazy alebo výpočty.
age = 20
print(f"Next year you'll be {age + 1}.")
vypíše
Next year you'll be 21.
Pred zavedením f-stringov programátori často spájali text pomocou operátora + alebo používali staršiu metódu .format(). F-stringy sú kratšie, prehľadnejšie a dnes predstavujú odporúčaný spôsob vytvárania textových reťazcov v modernom Pythone.