Two-fer: dva za cenu jedného
Naučíte sa:
- Funkcie v jazyku Python
- Predvolené (default) argumenty
- Šablóny reťazcov - f string
Prečítajte si
Vypracujte úlohu
Na prvý pohľad sa ani nezdá, že ide o programátorskú úlohu. 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.
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.
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.
def two_fer():
return "Jeden pre teba, jeden pre mňa."
Funkcia je jednoducho znovupoužiteľný kus programu. Keď ju raz vytvoríte, môžete ju zavolať vždy, keď ju budete potrebovať.
print(two_fer())
Takýto stroj však zakaždým vráti rovnakú vetu.
To funguje dovtedy, kým sa prvý zákazník nepredstaví.
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.