[EMAIL PROTECTED] wrote: > Here is a simple lambda that implements an exclusive or: > >>>> def XOR(x,y) : >>>> return lambda : ( ( x ) and not ( y ) ) or ( not ( x ) and ( y ) ) > > (Because of the resemblance to C macros, I have been cautious and > written the lambda with lots of parentheses.) > > To use this in later code, we define instances of the lambda with > specific function arguments. > >>>> topping = XOR( cream, icecream) >>>> sauce = XOR( tomato, BBQ ) > > > We now have two øfunctionsñ, topping() and sauce() which we can use > later to test flags. > >>>> cream = True >>>> icecream = False >>>> print topping() > True >
No, no, no, no, no! 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 Using a lambda was a completely pointless exercise here, you could have just returned the result directly: >>> def XOR(x,y): return x^y >>> topping = XOR(cream, icecream) >>> print topping True Same thing for your TFF function: 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: ..." -- http://mail.python.org/mailman/listinfo/python-list