[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