Python:lambda形式中的pass语句

54
一个 Python 新手问题,为什么这个语法是无效的:lambda: pass,而这个:def f(): pass 是正确的?
谢谢您的见解。
4个回答

55

lambda函数只能包含表达式 - 基本上是指那些可以出现在赋值语句右侧的东西。 pass 不是一个表达式 - 它不会被求值为一个值,a = pass 永远都是不合法的。

另一种思考方法是,因为lambda函数会隐式返回它们的主体的结果,所以 lambda: pass 实际上等价于:

def f():
    return pass

这没有意义。如果你真的需要一个no-op lambda,那么可以使用lambda: None代替。


3
明白了,谢谢!但是既然 lambda: None 仍然返回一个值,那么有没有办法定义一个匿名函数,使其的行为与 def f(): pass 完全相同呢? - Rez
22
实际上这两者是相同的——所有Python函数都会返回一个值;如果它们执行完毕或者遇到了一个裸露的return语句,它们会返回None - lvc

49

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

lambda: pass

等于:

def f():
   return pass

这确实毫无意义,而且会产生一个 SyntaxError


31

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

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

如果你正在寻找一个与这个“no-op”函数等价的lambda函数,那么可以使用以下代码:

lambda: None
例如:
>>> f = lambda: None
>>> print f()
None

0

如果你想使用lambda,你可以依靠省略号字面常量...

你的lambda将变成lambda: ...

省略号字面常量通常用于代替pass。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接