def pozdrav():
print("Ahoj světe!")
pozdrav()Martin Korbel
Funkce = základní stavební prvek v Pythonu.
Umožňují:
znovupoužití kódu,
přehlednost programu,
modularitu.
def pozdrav():
print("Ahoj světe!")
pozdrav()Funkce se definuje pomocí def.
Parametry předáváme v závorkách.
Výsledek se vrací pomocí return.
def soucet(a, b):
return a + b
print(soucet(3, 5)) # 8Parametry mohou mít výchozí hodnotu.
Funkce může vrátit více hodnot (pomocí tuple).
def rozdil(a, b=0):
return a - b
def info():
return "Jan", 25
print(rozdil(10)) # 10
jmeno, vek = info()
print(jmeno, vek) # Jan 25Pomáhají zlepšit čitelnost a statickou kontrolu.
def prumer(a: float, b: float) -> float:
return (a + b) / 2
print(prumer(4, 6))Komentář uvnitř trojitých uvozovek = docstring.
def obvod_ctverce(a: float) -> float:
"""Vrátí obvod čtverce podle délky strany a."""
return 4 * a
print(obvod_ctverce.__doc__)x = 10 # globální proměnná
def test():
x = 5 # lokální proměnná
print("Uvnitř funkce:", x)
test()
print("Mimo funkci:", x)Krátká forma zápisu funkce.
Používá se hlavně jako argument jiné funkce.
dvojnasobek = lambda x: x * 2
print(dvojnasobek(4)) # 8map – aplikuje funkci na všechny prvky sekvence.
filter – filtruje prvky podle podmínky.
reduce – akumuluje prvky (nutno importovat z functools).
from functools import reduce
cisla = [1, 2, 3, 4, 5]
print(list(map(lambda x: x**2, cisla))) # [1, 4, 9, 16, 25]
print(list(filter(lambda x: x % 2 == 0, cisla))) # [2, 4]
print(reduce(lambda x, y: x + y, cisla)) # 15def vypis(func, hodnota):
print("Výsledek:", func(hodnota))
def trojnasobek(x):
return x * 3
vypis(trojnasobek, 4)
vypis(lambda x: x**2, 5)def mocnina(n):
def vypocet(x):
return x ** n
return vypocet
druha = mocnina(2)
treti = mocnina(3)
print(druha(5)) # 25
print(treti(2)) # 8Vnořená funkce si pamatuje proměnné z okolí.
def pozdrav(jmeno):
def vnitrni():
print(f"Ahoj, {jmeno}!")
return vnitrni
f = pozdrav("Jan")
f() # Ahoj, Jan!Funkce, která upravuje chování jiné funkce.
Používá se např. pro logování, měření času, autorizaci.
def logovani(func):
def wrapper(*args, **kwargs):
print("Volání funkce:", func.__name__)
return func(*args, **kwargs)
return wrapper
@logovani
def vypis(text):
print(text)
vypis("Ahoj")Funkce, která volá sama sebe.
Potřebuje zastavovací podmínku!
def faktorial(n):
if n <= 1:
return 1
return n * faktorial(n - 1)
print(faktorial(5)) # 120Generátor = funkce, která vrací hodnoty postupně.
Pamatuje si stav mezi voláními.
def cisla_do(n):
for i in range(n):
yield i
for x in cisla_do(5):
print(x)cisla = [1, 2, 3, 4, 5]
# comprehension
ctverce = [x**2 for x in cisla]
# map + lambda
ctverce2 = list(map(lambda x: x**2, cisla))
print(ctverce, ctverce2)Vytvoř funkci obvod_obdelniku(a, b), která vrátí obvod.
Vytvoř lambda funkci, která vrací absolutní hodnotu.
Použij map() pro převod všech prvků [1,2,3,4] na jejich třetí mocninu.
Napiš funkci, která přijme seznam a funkci – vrátí seznam, kde je na každý prvek aplikována daná funkce.
Použij ji s anonymní funkcí pro zdvojnásobení čísel.
Napiš dekorátor, který před a po volání funkce vypíše text "--- začátek ---" a "--- konec ---".
Funkce zjednodušují kód a umožňují znovupoužití.
Lambda = krátká anonymní funkce.
map, filter, reduce = základ funkcionálního přístupu.
Dekorátory a generátory = pokročilé funkce pro čistý a efektivní kód.