y=if x>High: 2 elif x<Low: 1 else: 0
Stephen Horne
steve at lurking.demon.co.uk
Tue Jun 4 18:52:41 EDT 2002
More information about the Python-list mailing list
Tue Jun 4 18:52:41 EDT 2002
- Previous message (by thread): Problems with exec scoping (solved)
- Next message (by thread): directory
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Wed, 22 May 2002 19:12:10 -0400, Steven Majewski <sdm7g at Virginia.EDU> wrote: >I prefer: > >>>> ( 2, 1, 0 )[ [ x > hi, x < low, 1 ].index(1)] > >as more readable, although the lambda functional version gets a bit >more baroque: > >>>> (lambda x: (2,1,0)[(lambda x: [x > hi, x < low, 1])(x).index(1)])(arg) Hmmm I occasionally use the following little trick... def IF(p_Condition, p_True, p_False=lambda: None) : """ Expects parameterless functions or lambdas for the p_True and p_False arguments """ if p_Condition : return p_True () return p_False () #... print IF(x != 0, lambda: 5 // x) This could easily be adapted... print IF(x>High, lambda:2, IF(x<Low, lambda:1, lambda:0)) and if multi-condition patterns are extensively used... def FIRST (p_Tests, p_Default) : """ p_Tests : a sequence of 2-tuples, each containing 0 : A parameterless function for the test 1 : A parameterless function for the value p_Default : A parameterless function for the default result if all tests fail. Example... FIRST( [(lambda: x<Low, lambda: 1), (lambda: x>High, lambda: 2) ], lambda: 0 ) """ for l_Test,l_Value in p_Tests : if l_Test () : return l_Value () return p_Default () if p_Lo_Test () : return p_Lo_Result () if p_Hi_Test () : return p_Hi_Result () return p_Mid_Result () Actually, I prefer to use 'None' as the fail case in this pattern so that the test and result can be bound in one function. def FIRST (p_Functions) : """ p_Functions : a sequence of parameterless functions, each either returning a valid result or None. Example... FIRST( [(lambda: x<Low and 1 or None), (lambda: x>High and 2 or None), (lambda: 0 ) ] ) """ for l_Function in p_Functions : l_Result = l_Function () if l_Result != None : return l_Result return None Personally, I think there should be an if 'function' built in which has similar semantics to the IF function above but without needing the lambdas. It would be nice if it also supported more than three parameters - each pair giving an 'if' or 'elif' condition plus result and the final odd parameter giving the 'else' result. This would allow something like... if (x < Low : 1, x > High : 2, 0)
- Previous message (by thread): Problems with exec scoping (solved)
- Next message (by thread): directory
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list