ERJAN
ERJAN

Reputation: 24500

Why can't I use "return" in lambda function in python?

This does not work:

print((lambda :  return None)())

But this does:

print((lambda :  None)())

Why?

Upvotes: 36

Views: 65927

Answers (5)

Andriy Ivaneyko
Andriy Ivaneyko

Reputation: 22021

Lambda can execute only expressions and return result of the executed statement, return is the statement.

Consider using or and and operators to short-circuit the result for more flexibility in the values which will be returned by your lambda. See some samples below:

# return result of function f if bool(f(x)) == True otherwise return g(x)
lambda x: f(x) or g(x) 

# return result of function g if bool(f(x)) == True otherwise return f(x).
lambda x: f(x) and g(x) 

Upvotes: 11

renton
renton

Reputation: 3

Remember a lambda can call another function which can in turn return anything (Even another lambda)

# Does what you are asking... but not very useful
return_none_lambda = lambda : return_none()
def return_none():
    return None

# A more useful example that can return other lambdas to create multipier   functions
multiply_by = lambda x : create_multiplier_lambda(x)
def create_multiplier_lambda(x):
    return lambda y : x * y

a = multiply_by(4)
b = multiply_by(29)

print(a(2)) # prints 8
print(b(2)) # prints 58

Upvotes: 0

delanne
delanne

Reputation: 440

because lambda takes a number of parameters and an expression combining these parameters, and creates a small function that returns the value of the expression.

see: https://docs.python.org/2/howto/functional.html?highlight=lambda#small-functions-and-the-lambda-expression

Upvotes: 4

TigerhawkT3
TigerhawkT3

Reputation: 49318

lambda functions automatically return an expression. They cannot contain statements. return None is a statement and therefore cannot work. None is an expression and therefore works.

Upvotes: 14

Daniel Roseman
Daniel Roseman

Reputation: 599590

Because return is a statement. Lambdas can only contain expressions.

Upvotes: 41

Related Questions