24. Anonymní lambda funkce#
Někdy potřebujeme do parametru příkazu zadat vlastní funkci, tuto funkci však nemáme vytvořenu a pojmenovánu a pro jednorázové použití bychom se chtěli definici plnohodnotné funkce pomocí def
vyhnout. Přesně na toto použití jsou v Pythonu takzvané lambda funkce. Jsou to malé, anonymní funkce, které mohou být vytvořeny přímo parametrů příkazu. Mají následující vlastnosti.
Anonymita: Lambda funkce nemají jméno. Jsou definovány pomocí klíčového slova
lambda
, následovaného seznamem argumentů a tělem funkce.Jednoduchost: Lambda funkce jsou obvykle krátké a jednoduché. Jsou vhodné pro jednoduché operace, které nemusí být pojmenovány samostatnou funkcí.
Použití ve výrazech: Lambda funkce jsou často používány ve výrazech, kde je potřeba předat funkci jako argument do jiné funkce.
Použití v kombinaci s funkcemi jako
map
,filter
asorted
: Lambda funkce jsou často používány v kombinaci s těmito funkcemi pro efektivní zpracování dat.
Příklad lambda funkce:
# Lambda funkce pro výpočet součtu dvou čísel
soucet = lambda x, y: x + y
# Použití lambda funkce
vysledek = soucet(3, 5) # Výsledek bude 8
Poněkud smysluplnější aplikace je v případech, kdy je funkce předávána jako parametr jiné funkci. Například řazení seznamu metodou sort
má jako argument funkci, která slouží pro porovnávání hodno. Následující kód uloží do proměnné auta
seznam, který obsahuje značku auta, rok výroby a cenu. Protože jednotlivé položky seznamu je možné řadit podle různých kriterií, je nutné příkazu sort
předat i funkci, definující pořadí. Seřazení podle roku výroby může vypadat například následovně.
auta = [
{'znacka': 'Ford', 'rok': 2005, 'cena': 200000},
{'znacka': 'Mitsubishi', 'rok': 2000, 'cena': 250000},
{'znacka': 'BMW', 'rok': 2019, 'cena': 2400000},
{'znacka': 'VW', 'rok': 2011, 'cena':1500000}
]
auta.sort(key=lambda x: x['rok'])
Po spuštění proměnná auta obsahuje seznam seřazený podle roku výroby.
24.1. Úkol#
Modifikujte ukázku se seznamem aut tak, aby seznam byl seřazen podle ceny. Proměnnou auta
vytiskněte pro kontrolu příkazem print
. Ukázka je předpřipravena v poli pro odpověď a musíte modifikovat klíč pro definici pořadí a přidat příkaz pro tisk proměnné.