繁体   English   中英

lambda不能有2+的返回值?

[英]lambda can't have 2+ return values?

>>> 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

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

>>> (lambda x: (x,x+1))(10)
(10, 11)

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

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

((lambda x: x),x+1)(10)

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

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

>>> x=42
>>> (lambda x: x,x+1)
(<function <lambda> at 0x00000000022B2648>, 43)

请注意,43是因为x在外部范围使用,而不是x中lambda函数。

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

>>> type(itself_and_plusone(10))
<class 'tuple'>

在你的第一个例子中,元组是隐含的; python在看到表达式中的逗号时为你想象括号; 它为任何表达式执行此操作,而不仅仅是从函数返回时:

>>> 10, 10
(10, 10)

但是在你的lambda示例中,你必须使它们显式化,因为python将整个表达式视为一个新的元组(包含一个lambda和一个x + 1表达式):

>>> (lambda x: x, 10)
(<function <lambda> at 0x10f331b90>, 10)
>>> lambda x: x, 10
(<function <lambda> at 0x10f331aa0>, 10)
>>> lambda x: (10, 10)
<function <lambda> at 0x10f314ed8>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM