pythonlambda

How to write python lambda with multiple lines?


In python, how can you write a lambda function taking multiple lines. I tried

d = lambda x: if x:
                 return 1
              else 
                 return 2

but I am getting errors...


Solution

  • Use def instead.

    def d(x):
        if x:
            return 1
        else:
            return 2
    

    All python functions are first order objects (they can be assigned to variables and passed around as arguments), lambda is just a convenient way to make short ones. In general, you are better off using a normal function definition if it becomes anything beyond one line of simple code.

    Even then, in fact, if you are assigning it to a name, I would always use def over lambda (something PEP 8 explicitly recommends as it improves debugging). lambda is really only a good idea when defining short functions that can be placed inline into the function call, for example key functions for use with sorted().

    Note that, in your case, a ternary operator would do the job (lambda x: 1 if x else 2), but I'm presuming this is a simplified case and you are talking about cases where it's not reasonable to use a single expression.

    (As a code golf note, this could also be done in less code as lambda x: 2-bool(x) - of course, that's highly unreadable and a bad idea.)