Seminář programování v Pythonu na PORGu - lekce 20

Příklad na úvod

Příklad použití pythonu ve vědě -- elektrodynamické simulace: http://juluribk.com/2010/01/08/surface-plasmons-animation/

Lambda funkce

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.

Funkce map, filter, reduce

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.

List comprehension

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

Příklad

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.


Zpět na obsah | Poslední úprava: 2012-02-20