这不起作用:
print((lambda : return None)())
但这样做:
print((lambda : None)())
为什么?
答案 0 :(得分:14)
因为return
是一个陈述。 Lambdas can only contain expressions。
答案 1 :(得分:6)
lambda
函数会自动返回表达式。它们不能包含语句。 return None
是一个声明,因此无法工作。 None
是一个表达式,因此有效。
答案 2 :(得分:4)
因为lambda采用了许多参数和一个组合这些参数的表达式,并创建了一个返回表达式值的小函数。
答案 3 :(得分:3)
Lambda只能执行语句并返回执行语句的结果,结果就是表达式。
考虑使用or
和and
运算符来获得lambda返回的值的更多灵活性。请参阅以下一些示例:
# 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 False.
lambda x: f(x) or g(x)
答案 4 :(得分:0)
请记住,lambda
可以调用另一个函数,该函数又可以return
进行任何操作(甚至是另一个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