为什么不能不带括号调用 lambda 表达式?

0 投票
1 回答
854 浏览
提问于 2025-04-18 18:00

为了能够在函数对象返回的数字上加2,我需要调用它(当然),但我想知道为什么语法要求我使用括号来做到这一点。

可以正常工作:

x = 2 + (lambda: 4)()

不能正常工作:

x = 2 + lambda: 4()

这看起来几乎像是在调用一个元组(这显然是荒谬的):

()()
TypeError: 'tuple' object is not callable

我的意思是……这个语法有点难懂:

x = ((lambda: 1)(), (lambda: 2)(), (lambda: 3)())
print x[0] + x[1] + x[2]

1 个回答

2

这个不行是因为优先级的问题。如果你有下面这样的代码:

def x(): return 3
lambda: x()

你的第二行应该先正确计算函数 x 的返回值,然后再创建一个返回3的lambda表达式。

撰写回答