Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write python lambda with multiple lines? [duplicate]

Tags:

python

lambda

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...

like image 452
omega Avatar asked Feb 12 '13 23:02

omega


People also ask

How do you write multiple lines in lambda function in Python?

Can you write Python lambda multiple lines? No, you cannot write multiple lines lambda in Python. The lambda functions can have only one expression.

How do you write multiple statements in lambda expression?

Unlike an expression lambda, a statement lambda can contain multiple statements separated by semicolons. delegate void ModifyInt(int input); ModifyInt addOneAndTellMe = x => { int result = x + 1; Console. WriteLine(result); };

Can we have multiple statements in lambda function?

Lambda functions can only have one expression in their body. Regular functions can have multiple expressions and statements in their body.

How do you write multiple lines of text in Python?

Use triple quotes to create a multiline string It is the simplest method to let a long string split into different lines. You will need to enclose it with a pair of Triple quotes, one at the start and second in the end. Anything inside the enclosing Triple quotes will become part of one multiline string.


2 Answers

Use def instead.

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

All python functions are first order objects (they can be passed 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. lambda is really only a good idea when defining short key functions, for use with sorted(), for example, as they can be placed inline into the function call.

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.

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

like image 70
Gareth Latty Avatar answered Sep 23 '22 08:09

Gareth Latty


lambda construct in Python is limited to an expression only, no statements are allowed

While keeping the above mentioned constraint, you can write an expression with multiple lines using backslash char, of course:

>>> fn = lambda x: 1 if x \                      else 2 >>> fn(True) >>> 1 >>> fn(False) >>> 2 
like image 44
David Unric Avatar answered Sep 22 '22 08:09

David Unric