简体   繁体   中英

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?

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

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.

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) 

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM