【发布时间】:2016-05-04 09:56:44
【问题描述】:
这不起作用:
print((lambda : return None)())
但这确实:
print((lambda : None)())
为什么?
【问题讨论】:
-
您为什么要这样做?您有我们可以提供帮助的具体示例吗?
-
我试图给出一个最简单的 lambda 函数的教育示例 - 空 lambda
这不起作用:
print((lambda : return None)())
但这确实:
print((lambda : None)())
为什么?
【问题讨论】:
因为return 是一个声明。 Lambdas can only contain expressions.
【讨论】:
lambda 函数自动返回一个表达式。它们不能包含语句。 return None 是一个语句,因此无法工作。 None 是一个表达式,因此有效。
【讨论】:
Lambda只能执行expressions并返回执行语句的结果,返回的是statement。
考虑使用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 f(x).
lambda x: f(x) and g(x)
【讨论】:
因为 lambda 接受多个参数和组合这些参数的表达式,并创建一个返回表达式值的小函数。
【讨论】:
记住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
【讨论】: