一个Python新手问题,为什么这个语法无效:lambda: pass
,而这个:def f(): pass
是正确的?
感谢您的洞察力。
一个Python新手问题,为什么这个语法无效:lambda: pass
,而这个:def f(): pass
是正确的?
感谢您的洞察力。
lambda 只能包含表达式- 基本上,可以出现在赋值语句右侧的东西。pass
不是一个表达式 - 它不会计算为一个值,并且a = pass
永远是不合法的。
另一种思考方式是,因为 lambdas 隐式返回其 body 的结果,lambda: pass
实际上等价于:
def f():
return pass
这没有任何意义。如果您出于某种原因确实需要无操作 lambda,请lambda: None
改用。
这是一个错误,因为你必须在冒号后面加上返回值,所以:
lambda: pass
等于:
def f():
return pass
这确实没有意义,并且SyntaxError
也会产生 a 。
return
没有语句的函数的返回值是None
. 您可以从 OP 中定义的简单pass
函数中看到这一点:
>>> def f():
... pass
...
>>> print f()
None
如果您正在寻找与此“无操作”函数等效的 lambda 函数,则可以使用:
lambda: None
例如:
>>> f = lambda: None
>>> print f()
None