[Tutor] Lambda

Kirby Urner urnerk@qwest.net
Mon, 04 Feb 2002 23:14:25 -0800


Ditto the previous examples.

Plus:  here's without lambda -- yer basic function:

   >>> def concat(a,b):  return a + b

   >>> concat('A','C')
   'AC'

And here's with, though in a way you wouldn't normally
see it:

   >>> concat = lambda a,b: a+b
   >>> concat('A','C')
   'AC'

This just shows that lambda is setting up the basic
elements of a function:  parameters, what to do with
them.  It can't be very fancy because Python's lambdas
can't go on for lotsa lines -- just a way to do quicky
stuff.

So why use 'em?  Well, if you want to do some quickie
thing, it can seem a waste to go to all the trouble
to define a function, give it a name, the whole nine
yards.  All you really want is to do the thing, then
throw it away.  No need to memorialize the thing with
a name.  To borrow a slogan, a lambda means "Just Do It".

So the typical thing is to use it wherever you could
use a function.  Take the original concat:

   def concat(a,b):  return a + b

Now I distribute it over some parameters.  concat wants
two parameters, and what map(function,list1,list2) will
do is grab one parameter from each of the following lists
-- so they'd better have the same number of elements:

   >>> map(concat,['c','b','f'],['at']*3)
   ['cat', 'bat', 'fat']

But if I didn't want to bother with naming concat ahead
of time, I could do all of the above using a lambda,
making the function part of map(function,list1,list2)
contain an "anonymous function":

   >>> map(lambda a,b: a+b, ['c','b','f'],['at']*3)
   ['cat', 'bat', 'fat']

A variation on the theme:

   >>> apply(lambda a,b: a+b, ('c','at'))
   'cat'

And now, for something completely silly:

 >>> map(lambda z: apply(lambda a,b: a+b, z),zip(['f','c'],['at','at']))
['fat', 'cat']


Kirby