Reputation: 24500
This does not work:
print((lambda : return None)())
But this does:
print((lambda : None)())
Why?
Upvotes: 36
Views: 65927
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
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
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.
Upvotes: 4
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
Reputation: 599590
Because return
is a statement. Lambdas can only contain expressions.
Upvotes: 41