44

一个Python新手问题,为什么这个语法无效:lambda: pass,而这个:def f(): pass是正确的?

感谢您的洞察力。

4

3 回答 3

47

lambda 只能包含表达式- 基本上,可以出现在赋值语句右侧的东西。pass不是一个表达式 - 它不会计算为一个值,并且a = pass永远是不合法的。

另一种思考方式是,因为 lambdas 隐式返回其 body 的结果,lambda: pass实际上等价于:

def f():
    return pass

这没有任何意义。如果您出于某种原因确实需要无操作 lambda,请lambda: None改用。

于 2012-10-14T14:24:29.013 回答
45

这是一个错误,因为你必须在冒号后面加上返回值,所以:

lambda: pass

等于:

def f():
   return pass

这确实没有意义,并且SyntaxError也会产生 a 。

于 2012-10-14T14:24:23.897 回答
23

return没有语句的函数的返回值是None. 您可以从 OP 中定义的简单pass函数中看到这一点:

>>> def f():
...     pass
... 
>>> print f()
None

如果您正在寻找与此“无操作”函数等效的 lambda 函数,则可以使用:

lambda: None

例如:

>>> f = lambda: None
>>> print f()
None
于 2016-07-27T14:27:18.200 回答