[python] Buducnost Pythonu: lambda, map, filter
Roman Miklos
RMiklos na pss.sk
Pátek Listopad 10 13:54:17 CET 2006
Mne osobne sa tieto funkcionalne prvky v Pythone pacia, i ked ziadne
funkcionalne jazyky v praxi nepouzivam.
Myslim, ze to robilo Python zaujimavym i pre privrzencov FP a ukazalo to
ako sa daju pouzit veci z FP v beznej praxi.
Tu uvadzam 2 priklady pouzitia funkcionalneho pristupu
1) pri rozvinuti argumentov s wildcard-znakmi (?, *) na platne cesty, kde
map() a reduce() umoznuju takyto kompaktny zapis:
argument = sys.argv[1:]
filez = reduce(operator.add, map(glob.glob, argument))
2) callbacky pri widgetoch v Tkinteri:
* Ak je ten callback jednoducha funkcia a pouzije sa iba raz napriklad pri
jednom buttone, naco ju definovat sepratane pre cely skript, ked ju staci
zadefinovat cez lambda iba na tom mieste kde sa pouzije.
* callback s argumentom - t.j ak chces napr. pouzit ten isty callback pri
viacerych buttonoch, napr.
def callback(n):
print "button", n
Button(text="jeden", command=lambda: callback(1)).pack()
Button(text="dva", command=lambda: callback(2)).pack()
...
"Petr Prikryl" <PrikrylP na skil.cz>
Sent by: python-bounces na py.cz
10.11.2006 11:56
Please respond to
Konference PyCZ <python na py.cz>
To
"Konference PyCZ" <python na py.cz>
cc
Subject
Re: [python] Buducnost Pythonu: lambda, map, filter
superman
> Roman Miklóš
> > V trede Statické metody v Pythonu
> > (http://www.py.cz/pipermail/python/2006-November/004991.html)
> > superman napisal:
> > > ... map,filter a podobné (což prý v další verzi Pythonu nebude...
>
> [...] Zajímavý je blog Rossuma:
> http://www.artima.com/weblogs/viewpost.jsp?thread=98196
>
> Nedávno jsem od něj četl, že v Pythonu není podmíněné přiřazení,
> ani přiřazení není výrazem, neboť by to příliš připomínalo C. Teď
> píše, že lambda příliš připomíná Lisp, nebo Scheme, tudíž musí ven.
> Já bych doporučoval vůbec s tímto příastupem škrtnout celý Python,
> protože až příliš připomíná programovací jazyk.
O osudu lambda se diskutovalo na comp.lang.python. Osobně jsem
lambda nikdy nepotřeboval. Jakékoliv jeho použití v Pythonu
se podle mě dá jednoduše přepsat bez lambda způsobem, který
je proti lambda přehlednější a srozumitelnější.
Přiřazení jako výraz působí komplikace protože se
v boolovských výrazech může poplést == s =.
Podmíněný výraz je novinkou v Python 2.5.
Python je procedurální a nikoliv funkcionální jazyk.
Z funkcionálních zápisů v něm fungují jen ty věci,
které se dají JEDNODUŠE převést na procedurální postup.
Jiné výhody funkcionálních jazyků zde odpadají (například
automatická paralelizace výpočtu).
Z "The Zen of Python, by Tim Peters" bych k tomu vybral...
Simple is better than complex.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
There should be one-- and preferably only one --obvious way to do it.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Navrhuji rozebrat několik případů, kde se používají
lambda, map, filter, reduce a pohádat se o alternativním
zápisu jinými prostředky jazyka Python ;-)
pepr
_______________________________________________
Python mailing list
Python na py.cz
http://www.py.cz/mailman/listinfo/python
Mgr. Ing. Roman MIKLÓŠ
Prvá stavebná sporiteľňa a.s.
Bajkalská 30, P. O. Box 48
829 48 Bratislava 25
Tel.: +421/ 2 / 582 31 174
Fax: +421/ 2 / 582 31 109
Další informace o konferenci Python