Python:以lambda形式传递语句

Rez*_*Rez 39 python lambda anonymous-function

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

感谢您的见解.

etu*_*rdu 40

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

lambda: pass
Run Code Online (Sandbox Code Playgroud)

等于:

def f():
   return pass
Run Code Online (Sandbox Code Playgroud)

这确实没有任何意义,也产生了一个SyntaxError.


lvc*_*lvc 40

lambdas只能包含表达式 - 基本上,它可以出现在赋值语句的右侧.pass不是表达式 - 它不会评估为某个值,a = pass也从不合法.

另一种思考方式是,因为lambdas隐含地返回了他们身体的结果,lambda: pass实际上相当于:

def f():
    return pass
Run Code Online (Sandbox Code Playgroud)

这没有意义.如果由于某种原因你真的需要一个无操作的lambda,那就lambda: None改为了.

  • @Rez它*实际上是相同的 - 所有Python函数都返回一个值; 如果它们从最终落下,或者到达"返回",它们将返回"无". (20认同)
  • 这很有道理,谢谢!但是,因为`lambda:None`仍然返回一个值,有没有什么方法可以定义一个行为与`def f()完全相同的匿名函数:pass`? (3认同)

Lee*_*ton 15

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

>>> def f():
...     pass
... 
>>> print f()
None
Run Code Online (Sandbox Code Playgroud)

如果您正在寻找与此"无操作"功能等效的lambda函数,那么您可以使用:

lambda: None
Run Code Online (Sandbox Code Playgroud)

例如:

>>> f = lambda: None
>>> print f()
None
Run Code Online (Sandbox Code Playgroud)