什么"返回2,lambda x:0"在python中意味着什么?

时间:2014-08-10 22:41:36

标签: python

这是Python中的一行代码:

return 2,lambda x: 0

这是什么意思?

这个程序来自堆栈交换帖子:

https://cs.stackexchange.com/questions/1984/proving-the-intractability-of-this-nth-prime-recurrence/29054#29054

让我感到困惑,因为我想知道程序员为什么不简单地编码

return 2,0

对不起,我是Python新手......如果对某些人来说这听起来很明显......

3 个答案:

答案 0 :(得分:2)

返回:

return ((2), (lambda x: 0))

返回的值是一个元组,第一个值为2,第二个值为lambda函数。

答案 1 :(得分:2)

我认为这个问题已经被模糊化了。我一般都明白"它是什么意思?"在编程上下文中表示"我如何解析这个?"所以我会从那个角度回答。


从语句

中删除return

python中return的真正含义是"此行后面的任何内容都是函数"的结果。它是一个声明,而不是一个函数调用,所以不要试图将它放入你的解析中。 return x应该被理解为正在返回表达式 x的声明。

因此,问题就变成了:2, lambda x: 0表达式是什么?

(我已经添加了一个可读性的空间 - Python并不关心逗号周围的空格,尽管按照惯例,你应该使用空格逗号)

Python元组不需要括号

Python的元组类型不需要括号。因此a, b, c(a, b, c)

相同

因此,有两个表达式绑定在元组中:2lambda x: 0。 您可以将2, lambda x: 0视为(2, lambda x: 0) - 它们完全相同。

什么是2

这是两个。

什么是lambda x: 0

这是" lambdas"的python语法。或者"匿名函数"。 Python实践真的不鼓励使用lambda绑定,我通常建议你不要这样做。 Lambdas非常有用,但它们在python中有点破碎,会让你遇到麻烦。

基本语法是关键字lambda,以逗号分隔的参数列表:和结果表达式。 在这种情况下,逗号分隔的参数只是x,结果表达式是常量0

您可以将此lambda重写为

def f(x):
    return 0

简短回答

所以,这个语句返回的元组有一个常量整数作为它的第一个元素,一个函数接受一个参数并返回0作为它的第二个元素。


如果您想要对这些组件中的任何组件进行更深入的解释,那么您的问题必须更加具体。 "它是什么意思?"非常模糊,很难以完整的方式回答。

答案 2 :(得分:1)

在shell中试试。这是非常自我解释的:

>>> def f():
...    return 2, lambda x: 0
... 
>>> f()
(2, <function <lambda> at 0x109d1b758>)
>>> f()[1]('anything')
0