lambda不能有2+的返回值?

thk*_*ang 2 python lambda

>>> def itself_and_plusone(x):
...     return x, x+1
... 
>>> itself_and_plusone(1)
(1, 2)

>>> (lambda x: x,x+1)(10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
Run Code Online (Sandbox Code Playgroud)

为什么?和lambda一起解决?不是

>>> (lambda x: (x,x+1))(10)
(10, 11)
Run Code Online (Sandbox Code Playgroud)

因为它返回一个元组(或列表..)并且需要解包元组

Mar*_*ers 12

如果没有括号,则解释如下:

((lambda x: x),x+1)(10)
Run Code Online (Sandbox Code Playgroud)

这会失败,因为第二个x在lambda表达式之外.即使x已定义,它仍然会失败,因为你不能使用元组就像它是一个函数一样.

这个简单的变化显示了正在发生的事情:

>>> x=42
>>> (lambda x: x,x+1)
(<function <lambda> at 0x00000000022B2648>, 43)
Run Code Online (Sandbox Code Playgroud)

请注意,43是因为使用x了外部作用域,而不是xlambda函数.

写它的正确方法是lambda x: (x,x+1).确实如此,正如您所指出的,返回一个元组,但您的原始函数也是如此:

>>> type(itself_and_plusone(10))
<class 'tuple'>
Run Code Online (Sandbox Code Playgroud)