explain this function to me, lambda confusion

andrej.panjkov at climatechange.qld.gov.au andrej.panjkov at climatechange.qld.gov.au
Thu May 8 21:57:03 EDT 2008


On May 8, 6:11 pm, Duncan Booth <duncan.bo... at invalid.invalid> wrote:

>
> No, no, no, no, no!
>

Geez.  Go easy.

> You have got it entirely wrong here. Your XOR function simply returns a
> function which gives you the result of xoring the parameters AT THE TIME
> WHEN YOU ORIGINALLY CREATED IT. I'm guessing that you had already set
> cream and icecream (otherwise the call to XOR would have thrown an
> exception) and at leas one was true. Try setting them both False at the
> beginning:
>
> >>> cream = False
> >>> icecream = False
> >>> topping = XOR( cream, icecream)
> >>> cream = True
> >>> icecream = False
> >>> print topping()
>
> False
>

Ok. I understand this better now.  I did say I found the documentation
rather terse on this.

> Using a lambda was a completely pointless exercise here, you could have
> just returned the result directly:


If I try out a new language, I try to exercise those parts of the
language that are new to me.  Now I saw lambdas, an interesting
structure I hadn't seen before. So I tried them out.  I get to learn a
little at the same time as scripting.  That was the "point".  I only
get to optimise my use of a language by trying out various corners of
it.

> def TFF(x,y,z) :
>   return x and not y and not z
>
> AddOnly = TFF( options.AddAction, options.ReplaceAction,
> options.DeleteAction )
> DeleteOnly = TFF( options.DeleteAction, options.AddAction,
> options.ReplaceAction )
> ReplaceOnly = TFF( options.ReplaceAction, options.AddAction,
> options.DeleteAction )
>
> if not (DeleteOnly or AddOnly or ReplaceOnly):
>   print "Error:  Exactly one of  [ --add | --replace | --delete ]
> allowed. "
>   parser.print_help()
>   exit
>
> which boils down to:
>
> if (options.AddAction + options.ReplaceAction +
>         options.DeleteAction) != 1:
>     print "Error: ..."

Indeed, there are many ways this could be done.  Some are more
concise, some are more efficient.  As I said, I did it the way I did
it to try out lambdas.  Your way achieves the result, rather elegantly
I think, but teaches me nothing about using lambdas.

Pardon my tetchiness, but it is a little hard to receive such blunt
and inflexible replies to my posts.

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?



More information about the Python-list mailing list