Nauč se Python > Kurzy > Hadí workshop @CodeWeekEU > Úvod do Pythonu > Vlastní funkce

Vlastní funkce

Pamatuješ na funkce len() a print()? 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 měla:

  • 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, které má funkce provést.

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

Naše 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()

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 jako len('slovo') a print(1 + 2) umí navíc pracovat s hodnotou.

Poďme 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('Vitam ť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? Ve funkci můžeš použít příkaz return, který funkci okamžitě ukončí a vrátí danou hodnotu:

def dvojnasobek(x):
    return x * 2

print(dvojnasobek(42))

Zkus napsat funkci, která 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ě?

Ř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.