[python] Buducnost Pythonu: lambda, map, filter

Radek Kanovsky rk na dat.cz
Pondělí Listopad 13 18:48:57 CET 2006


On Mon, Nov 13, 2006 at 06:14:26PM +0100, Roman Miklos wrote:

> Kazdopadne si myslim. ze reduce() ma opodstatnenie, kto tomu rozumie, moze 
> robit veci elegantnejsie. 

To je asi otazka vkusu. Osobne nic proti funkci reduce nemam, ale uznavam,
ze patri spis do nejake pomocne knihovny nez do __builtins__.

> # suma 1,..,n
> suma1=lambda n: reduce(lambda x,y: x+y, range(n+1))
> print "suma(%d)=%d" %(5, suma1(5))

sum(range(n+1))

> # suma zoznamu
> suma2=lambda l:  reduce(lambda x,y: x+y, l)
> l = range(6)
> print "suma(%s)=%d" % (l, suma2(l))

sum(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))

Faktorial se prakticky pocita pouze v prvnich lekcich vyuky Pythonu
a tam se to kvuli nazornosti dela rekurzivni funkci :-)

> # 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))

[f for a in arguments for f in glob.glob(a)]

Radek Kaňovský


Další informace o konferenci Python