Lambda funkce (též anonymní funkce) je definována přímo v místě, kde je použita.
Syntax je: lambda parametr: operace_s_parametrem
Použití: když potřebujeme nějaké funkci předat jinou, jednoduchou funkci
Příklady: http://www.secnetix.de/olli/Python/lambda_functions.hawk nebo http://www.guru99.com/functions-in-python.html.
Příklady:
>>> a=[1,2,3] >>> map(lambda x: x**2, a) [1, 4, 9] >>> filter(lambda x: x%2==0, a) [2] >>> reduce(lambda mezisoucet,y: mezisoucet+y, a) 6
Rozmyslete, jakou funkci má následující kód a zda to není blbost:
>>> filter(lambda x: x, a)
Nápověda: vzpomeňte si z lekce 3, které výrazy se v pythonu vyhodnocují jako pravda a které jako nepravda.
Stručné zpracování seznamu. Umí: 1) použít danou funkci na každý prvek, 2) filtrovat prvky podle nějakého pravidla. Nahrazuje tedy funkce map, resp. filter. (Funkci reduce() tím nahradit nejde!)
Syntax: [x**2 for x in seznam if podmínka ]
Část s podmínkou může být vynechána. Česky by to šlo říct jako "seznam všech x2 pro x ze seznamu, pokud je splněna podmínka".
Dobrý příklad magie s List comprehension je tento jednořádkový kód hledající prvočísla od 1 do 1000 (z tohoto webu):
print [x for x in range(2, 1000) if x not in [j for i in range(2, 32) for j in range(i*2, 1000, i)]]
Rozmyslete, jak to funguje.
Tento postup na jeden řádek je dost elegantní, ale pro větší rozsahy čísel není efektivní. Toto téma probereme někdy později.