[python] Buducnost Pythonu: lambda, map, filter
Roman Miklos
RMiklos na pss.sk
Pondělí Listopad 13 18:14:26 CET 2006
Tiez som cital, co napisal Guido
v tom clanku
All Things Pythonic
The fate of reduce() in Python 3000
http://www.artima.com/weblogs/viewpost.jsp?thread=98196
Ale rozumel som z toho akurat ...blabla...reduce()...blabla..., teda
ziadne dovody.
Aj ked reduce pouzivam len v spojeni s glob(), prave preto, ze toto
pouzitie uvadzaju v kapitole 9 knihy
http://www.grada.cz/katalog/kniha/naucte-se-python/ (pozri priklad dole)
povazoval som pouzite reduce() za pytonicke.
Naopak Guido sa teraz snazi v tom horeuvedenom clanku s nadpisom 'All
Things Pythonic' povedat asi to, ze reduce() nie je pytonicky.
Kazdopadne si myslim. ze reduce() ma opodstatnenie, kto tomu rozumie, moze
robit veci elegantnejsie.
Tu je par jednoduchych prikladov na reduce():
--- reduce.py ---
# reduce(function, list [, init_val])
# aplikuje fukciu 2 argumentov na prvky zoznamu zlava do prava,
# t.j. tak, aby sa zoznam zredukoval na jednu hodnotu.
# S init_val mozno zadat inicializacnu hodnotu
# Napriklad:
# reduce(lambda x,y:x+y,range(1,6),5)
# vypocita 5+(((((1+2)+3)+4)+5))=20.
# priklady:
# suma 1,..,n
suma1=lambda n: reduce(lambda x,y: x+y, range(n+1))
print "suma(%d)=%d" %(5, suma1(5))
# suma zoznamu
suma2=lambda l: reduce(lambda x,y: x+y, l)
l = range(6)
print "suma(%s)=%d" % (l, suma2(l))
# faktorial
faktorial=lambda n: reduce(lambda x,y: x*y, range(2, n+1), 1)
print "faktorial(%d)=%d" % (0, faktorial(0))
print "faktorial(%d)=%d" % (5, faktorial(5))
# Globbing - rozvinut wildcards ?, * v cestach k suborom
import sys, operator, glob
arguments = sys.argv[1:]
# ak su zadane nejake command-line argumenty (napr. editor.py oop1*.*
*.py~)
if arguments:
# pouzitie reduce()
filez = reduce(lambda x,y: x+y, map(glob.glob, arguments))
print filez
# bez pouzitia reduce()
filez=[]
for arg in arguments:
arg_list=glob.glob(arg)
filez += arg_list
print filez
--- koniec ---
Myslim, ze reduce() nebude nahradeny nijakou inou alternativou. Jednoducho
to co reduce() robil za teba, budes musiet naprogramovat.
Jakub Hegenbart <kyosuke na seznam.cz>
Sent by: python-bounces na py.cz
13.11.2006 15:34
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
Petr Prikryl wrote:
> Jde o to, že Python může k reduce a lambda nabídnout
> alternativy, které nelze srovnávat s primitivností
> podmíněného skoku. Ty alternativy mi připadají lepší
> než reduce/lambda.
Dobře, tohle mě zajímá: Jakou alternativu nabízí Python k foldl (které
si přejmenoval na ?reduce?)? U map je to jasné, přeci jen list
comprehension ani generator expression nejsou o moc horší, navíc
generator expression má lazy sémantiku, což je Good Thing(TN). Ale u
toho reduce() trošku tápu.
Jakub Hegenbart
_______________________________________________
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