Nauč se Python > Kurzy > Hadí workshop pro PyLadies > Úvod do Pythonu > Vlastní funkce

Vlastní funkce #

Pamatuješ na funkce len(), print() nebo randrange() z modulu random? Jsou jako kouzelná zaříkadla z knihy vázané v kůži: když víš jak se jmenují a umíš je správně napsat, něco pro tebe udělají.

Teď postoupíme na další úroveň: vymyslíme si vlastní zaříkadla! Jak? Budeme kombinovat příkazy, které už známe.

Třeba funkce, která tě pozdraví, by mohla:

  • Vypsat „ahoj!“
  • Vypsat „jak se máš?“

Definice funkce v Pythonu začíná klíčovým slovem def, dále je uveden název a následují závorky (zatím prázdné). Pak je jako po if dvojtečka a odsazené příkazy – tentokrát příkazy, které má funkce provést. Napiš to do programu:

def pozdrav():
    print('Ahoj!')
    print('Jak se máš?')

Tvoje první funkce je připravena!

Když ale tenhle program spustíš, nic neudělá. To proto, že tohle je jen definice funkce. Python teď ví jak pozdravit – ale neřeklo se, že to má udělat!

Na konec programu přidej volání. To už není součást funkce, ale pokračování samotného programu. Proto nesmí být odsazené:

def pozdrav():
    print('Ahoj!')
    print('Jak se máš?')

pozdrav()

Co se stane, když funkci zavoláš několikrát po sobě?

def pozdrav():
    print('Ahoj!')
    print('Jak se máš?')

pozdrav()
pozdrav()
pozdrav()

Řešení

Co se stane, když volání dáš nad definici funkce, místo na konec programu?

pozdrav()

def pozdrav():
    print('Ahoj!')
    print('Jak se máš?')

Řešení

Parametry #

Tvoje funkce se dá volat jen jako pozdrav(). Funkce ale jako len('slovo') a print(1 + 2) umí navíc pracovat s hodnotou.

Poďme teraz napisať funkciu, ktorá ťa pozdraví menom. (Uľahčíme si to použitím jazyka, ktorý nepoužíva piaty pád.)

def pozdrav(meno):
    print('Vítam ťa,', meno)

pozdrav('Ola')
pozdrav('Soňa')
pozdrav('Hubert')
pozdrav('Anička')

Jak to funguje? V definici funkce uvedeš závorkách parametr – jméno proměnné se kterou bude funkce pracovat. Hodnotu pro tenhle parametr pak zadáš při volání funkce.

Zvládneš napsat program, který se zeptá na jméno a pak tě pozdraví?

Řešení

Co se stane, když funkci zavoláš bez hodnoty pro parametr?

Řešení

Funkce může obsahovat jakýkoli kód. Třeba podmíněný příkaz, if. Příkazy po if je pak potřeba odsatit o další čtyři mezery:

def pozdrav(meno):
    print('Vitam ťa,', meno)
    if meno == 'Ola':
        print('Ty umíš programovať!')

pozdrav('Hubert')
pozdrav('Ola')
pozdrav('Soňa')

Vracení #

Další věc, kterou funkce jako len umí, je vrátit výsledek:

delka = len('Ola')
print(delka)        # napíše: 3

Jak na to, kdybys takovou funkci chtěla napsat? V definici funkce můžeš použít příkaz return. Ten funkci okamžitě ukončí a vrátí danou hodnotu:

def dvojnasobek(x):
    return x * 2

print(dvojnasobek(42))

Zkus se zamyslet, jak napsat funkci, která vrátí pátý pád nějakého jména. Třeba:

  • paty_pad('Ola') → 'Olo'
  • paty_pad('Soňa') → 'Soňo'
  • paty_pad('Hubert') → 'Huberte'

Tohle je velice složitý úkol, tak si ho trochu zjednodušíme. Funkce by měla dělat tohle:

  • Pokud jméno je „Hubert“:
    • vrátí Huberte
  • Pokud jméno končí na a:
    • vrátí jméno s o místo posledního písmenka
  • Jinak:
    • Vrátí původní jméno. (Uživatel si toho snad nevšimne.)
def paty_pad(jmeno):
    if jmeno == 'Hubert':
        return 'Huberte'
    elif jmeno[-1] == 'a':
        return jmeno[:-1] + 'o'
    else:
        return jmeno

Dokážeš změnit funkci pozdrav, aby zdravila v češtině? Můžeš na to použít funkci paty_pad.

Řešení

Shrnutí #

Co bylo nového tentokrát?

  • Funkce umožňuje pojmenovat nějkolik příkazů, a pak je zavolat najednou.
  • Parametry funkce, hodnoty se kterými funkce pracuje, se zadávají v závorkách.
  • return ukončí funkci a vrátí hodnotu

Toto je stránka lekce z kurzu, který probíhá nebo proběhl naživo s instruktorem.