Kuchyňský robot má tlačítko „Šlehat“. Dáš do něj vajíčka a cukr, zmáčkneš ho a dostaneš pěnu. Nemusíš vědět, jak uvnitř funguje motor. Stačí vědět, co dovnitř dát a co dostaneš ven.
Funkce v programu je takové tlačítko. Kus kódu jednou napíšeš, pojmenuješ a pak ho voláš, kolikrát chceš. Program je kratší, přehlednější a chybu opravíš na jednom místě.
print(), len() a input() jsou funkce, které už Python má.defŘádek def jmeno(parametry): vytvoří novou funkci. Pod ním je odsazené tělo. Definice sama nic neprovede, funkce se spustí až voláním.def pozdrav(): → print("Ahoj")def obsah(a, b): jsou a, b parametry. Ve volání obsah(3, 4) jsou 3 a 4 argumenty.returnreturn funkci ukončí a vrátí výsledek tam, odkud byla zavolána. Výsledek můžeš uložit do proměnné nebo s ním dál počítat.def dvakrat(n): return n * 2 – dvakrat(5) vrátí 10.def obsah_obdelniku(a, b): s = a * b return svysledek = obsah_obdelniku(3, 4)print(vysledek)a = 3, b = 4.s = 12 a return vrátí 12.vysledek a print ji vypíše.def dvakrat(n): return n * 2 a pak print(dvakrat(dvakrat(3)))?dvakrat(3) = 6. Pak dvakrat(6) = 12.def vetsi(a, b): → if a > b: return a → return b. Když je a větší, první return funkci ukončí. Jinak se dojde k return b. vetsi(3, 8) vrátí 8.def soucet(a, b): print(a + b) a pak x = soucet(2, 3) * 10.def soucet(a, b): return a + b a pak x = soucet(2, 3) * 10, tedy 50.print jen vypíše na obrazovku. Funkce bez return vrací None a s None nejde počítat.
def ji definuje, voláním se spustí. Parametry jsou vstupy, return vrací výsledek. Bez return funkce vrací None.Když ve škole napíšeš „Novák“, myslíš spolužáka ze své třídy. Ve vedlejší třídě může být jiný Novák. Jména platí jen v určité „místnosti“. U funkcí je to stejné: proměnná vytvořená uvnitř funkce existuje jen uvnitř.
Kdo tomu rozumí, nedělá záhadné chyby typu „proč se mi proměnná nezměnila“. Naučíš se taky výchozí a pojmenované parametry, které Python používá všude.
def. Volání jmeno(argumenty) ji spustí. Argumenty se dosadí do parametrů v pořadí, v jakém jsou napsané.def obvod(a, b): return 2 * (a + b) a volání obvod(3, 4) vrátí 14.return a Nonereturn hodnota funkci ukončí a vrátí výsledek. Funkce bez return vrátí speciální hodnotu None (nic).def ahoj(): print("ahoj") – print(ahoj()) vypíše „ahoj“ a pak None.s v těle funkce.pocet = 0 na začátku programu.b=1). Když argument při volání vynecháš, použije se tato hodnota.def obvod(a, b=1): – obvod(3) počítá s b = 1.obvod(b=2, a=5)def zvetsi(x): x = x + 1 return xx = 5zvetsi(x)print(x)Vypíše 5, ne 6. Parametr x uvnitř funkce je lokální kopie. Funkce ji zvětší na 6 a vrátí, ale vrácenou hodnotu nikdo neuložil. Globální x zůstalo 5. Správně: x = zvetsi(x).
| Volání | a | b | Výsledek 2 * (a + b) |
|---|---|---|---|
obvod(3) | 3 | 1 (výchozí) | 8 |
obvod(3, 4) | 3 | 4 | 14 |
obvod(b=2, a=5) | 5 | 2 | 14 |
spocitej_prumer) vysvětlí, co kód dělá.prumer(a, b, c), která vrátí průměr tří čísel. Kolik vrátí prumer(1, 2, 6)?def prumer(a, b, c): return (a + b + c) / 3. Závorky jsou nutné, jinak by se dělilo jen c. (1 + 2 + 6) / 3 = 9 / 3 = 3.0 (dělení / vrací float).def f(): y = 10 a pak f() a print(y)?NameError. Proměnná y je lokální, po skončení funkce zanikne a mimo funkci neexistuje.return a ulož: x = zvetsi(x).Každé volání funkce má vlastní lokální proměnné, které po návratu zanikají.
return. Výchozí hodnoty (b=1) a pojmenované argumenty (b=2) dělají volání pohodlnější.