explain this function to me, lambda confusion

Paul McGuire ptmcg at austin.rr.com
Mon May 19 09:40:31 EDT 2008


On May 18, 10:41 am, "inhahe" <inh... at gmail.com> wrote:
> > Both the responses offer lambda free alternatives. That's fine, and
> > given the terse documentation and problems that I had understanding
> > them, I would agree. So what applications are lambdas suited to? I
> > think the parameterised function model is one.
> > What else?
>
> i've hardly ever used lambdas since map() and filter() were replaced by list
> comprehension.  two other uses I can think of for it are: using it as a
> sorting key (which takes a function and lambdas are perfect for that when a
> direct function isn't available. for example, lambda x: x.myName), and I
> made an irc bot once that certain events had a list of fuctions that would
> be called after that event.  it was like being able to dynamically add and
> remove event handlers.  for example what if you asked the user a question
> and you wanted to know for the next input whether it was from that user and
> was an answer to that question.  sometimes the function to add would be very
> simple, so writing a def for it would just be ugly.

lambda is handy in defining parse actions in pyparsing.  Parse actions
are callbacks to be run when an expression within a larger grammar is
matched.  A common use for parse actions is to do some sort of text or
type conversion.  The simplest parse actions are called using the list
of matched tokens.  Here is a subexpression that will convert numeric
strings found in a larger grammar to ints:

integer = Word("0123456789").setParseAction(lambda tokens:
int(tokens[0]) )

Since this returns an actual int, there is no need to junk up the post-
parsing code with calls to int(), float(), etc. for these simple
conversions.

Here is an example parse action that just converts a set of matched
words to title case:

title = OneOrMore(Word(alphas)).setParseAction(lambda tokens: "
".join([ t.title() for t in tokens ]) )
print title.parseString("the sun also rises")[0]

prints:
The Sun Also Rises

This second example is about as complex as I'd like to get in a
lambda, though.  Anything more elaborate than that, and I'd go with a
separately defined function.

-- Paul





More information about the Python-list mailing list