为什么括号似乎会导致在Python中进行评估?

时间:2015-08-27 14:59:57

标签: python lambda tuples evaluation parentheses

我在这个被接受的answer中看到一个关于Python中lambda函数的问题,似乎括号围绕着什么是OP的问题,一个lambda函数定义,将导致评估。也许跨语言的标准行为(正如我在Powershell中看到的类似,here)? this answer about tuples可能会以某种方式表现出来。这一切都很熟悉。但是有人可以提供Python文档的链接(或者说应该存在的简洁文本,即使它不存在)解释为什么括号会导致Python中的评估?

您的回答将帮助我消化列表推导中关于lambda函数的原始答案。

1 个答案:

答案 0 :(得分:4)

不,lambda周围的括号不会导致它被评估。它们是 group 表达式,以区别于大表达式的其他部分。

执行实际调用的(x)之后是lambda

>>> lambda x: x*x
<function <lambda> at 0x1076b3230>
>>> (lambda x: x*x)
<function <lambda> at 0x1076b32a8>
>>> x = 10
>>> (lambda x: x*x)(x)
100

如果你没有使用括号,那么(x)将成为lambda函数封装的表达式的一部分:

>>> lambda x: x*x(x)
<function <lambda> at 0x1076b32a8>

因为lambda表达式具有最低precedence of all Python operators。有关使用括号的相关文档是Parenthesized forms section