Is there a way to perform "if" in python's lambda?

PythonLambdaPython 2.6

Python Problem Overview


In Python 2.6, I want to do:

f = lambda x: if x==2 print x else raise Exception()
f(2) #should print "2"
f(3) #should throw an exception

This clearly isn't the syntax. Is it possible to perform an if in lambda and if so how to do it?

Python Solutions


Solution 1 - Python

The syntax you're looking for:

lambda x: True if x % 2 == 0 else False

But you can't use print or raise in a lambda.

Solution 2 - Python

why don't you just define a function?

def f(x):
    if x == 2:
        print(x)
    else:
        raise ValueError

there really is no justification to use lambda in this case.

Solution 3 - Python

Probably the worst python line I've written so far:

f = lambda x: sys.stdout.write(["2\n",][2*(x==2)-2])

If x == 2 you print,

if x != 2 you raise.

Solution 4 - Python

You can easily raise an exception in a lambda, if that's what you really want to do.

def Raise(exception):
    raise exception
x = lambda y: 1 if y < 2 else Raise(ValueError("invalid value"))

Is this a good idea? My instinct in general is to leave the error reporting out of lambdas; let it have a value of None and raise the error in the caller. I don't think this is inherently evil, though--I consider the "y if x else z" syntax itself worse--just make sure you're not trying to stuff too much into a lambda body.

Solution 5 - Python

note you can use several else...if statements in your lambda definition:

f = lambda x: 1 if x>0 else 0 if x ==0 else -1

Solution 6 - Python

Lambdas in Python are fairly restrictive with regard to what you're allowed to use. Specifically, you can't have any keywords (except for operators like and, not, or, etc) in their body.

So, there's no way you could use a lambda for your example (because you can't use raise), but if you're willing to concede on that… You could use:

f = lambda x: x == 2 and x or None

Solution 7 - Python

This snippet should help you:

x = lambda age: 'Older' if age > 30 else 'Younger'

print(x(40))

Solution 8 - Python

If you still want to print you can import future module

from __future__ import print_function

f = lambda x: print(x) if x%2 == 0 else False

Solution 9 - Python

You can also use Logical Operators to have something like a Conditional

func = lambda element: (expression and DoSomething) or DoSomethingIfExpressionIsFalse

You can see more about Logical Operators here

Solution 10 - Python

what you need exactly is

def fun():
    raise Exception()
f = lambda x:print x if x==2 else fun()

now call the function the way you need

f(2)
f(3)

Solution 11 - Python

An easy way to perform an if in lambda is by using list comprehension.

You can't raise an exception in lambda, but this is a way in Python 3.x to do something close to your example:

f = lambda x: print(x) if x==2 else print("exception")

Another example:

return 1 if M otherwise 0

f = lambda x: 1 if x=="M" else 0

Solution 12 - Python

the solution for the given scenerio is:

f = lambda x : x if x == 2 else print("number is not 2")
f(30)  # number is not 2
f(2)   #2

Solution 13 - Python

Following sample code works for me. Not sure if it directly relates to this question, but hope it helps in some other cases.

a = ''.join(map(lambda x: str(x*2) if x%2==0 else "", range(10)))

Solution 14 - Python

Hope this will help a little

you can resolve this problem in the following way

f = lambda x:  x==2   

if f(3):
  print("do logic")
else:
  print("another logic")

Solution 15 - Python

Here's the solution if you use Python 3.x!

>>> f = lambda x: print(x) if x == 2 else print("ERROR")
>>> f(23)
ERROR
>>> f(2)
2
>>> 

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionGuyView Question on Stackoverflow
Solution 1 - PythonRobert RossneyView Answer on Stackoverflow
Solution 2 - PythonSilentGhostView Answer on Stackoverflow
Solution 3 - PythonjimifikiView Answer on Stackoverflow
Solution 4 - PythonGlenn MaynardView Answer on Stackoverflow
Solution 5 - PythonfilotnView Answer on Stackoverflow
Solution 6 - PythonDavid WoleverView Answer on Stackoverflow
Solution 7 - PythonAdarsh SomasundarView Answer on Stackoverflow
Solution 8 - PythonJuan Pablo LopezView Answer on Stackoverflow
Solution 9 - PythonVictor LucasView Answer on Stackoverflow
Solution 10 - PythonManjunath BhadrannavarView Answer on Stackoverflow
Solution 11 - PythonPaul CysneView Answer on Stackoverflow
Solution 12 - PythonabhiView Answer on Stackoverflow
Solution 13 - PythonRahulView Answer on Stackoverflow
Solution 14 - PythonAnurag BhakuniView Answer on Stackoverflow
Solution 15 - PythonNagesh JayaramView Answer on Stackoverflow