Just learned some tricks in #python in IRC-freenode:<p>I have heard a lot of complaints about Pythons lambdas being crippled but Python does allow if-else in lambdas, I didn't know before.
Not in the ordinary Python way but:<p>f = lambda n_: (lambda ns: ns.__setitem__('f', lambda n: n if n in [0, 1] else \
fib(n-1) + fib(n - 2)) or ns['f'](n_))({})<p>map(lambda n: n<i></i>3 if n % 2 == 1 else n<i></i>2, range(10))<p>>>> reduce(lambda x,y: x+y if y % 2 == 1 else x-y, [1,2,3,4,5])
3<p>>>> fib = lambda n: n if n in [0, 1] else fib(n-1) + fib(n - 2)
>>> fib(12)
144<p>also:
[n<i></i>3 if n%2 else n<i></i>2 for n in range(10)]<p>For soem reason * * disappears if next to each other.
That's the normal python idiom for the ternary operator in other languages if I'm not mistaken. Its lambdas are still crippled, for the same reasons people called them crippled before, which is fine for python, IMO.<p>If I recall correctly, the if...else for ternary was added mainly because people were doing stuff with and...or to achieve the same effect.