为什么Python中没有多行Lambda?
我听说过,Python 不支持多行的 lambda 表达式,因为这样会和其他语法结构产生冲突。今天我在公交车上思考这个问题,发现我想不出任何一个 Python 的语法结构会和多行 lambda 冲突。这让我感到很惊讶,因为我对这个语言还是比较了解的。
我相信 Guido(Python 的创始人)一定有他的理由不把多行 lambda 加入语言中,但出于好奇:有没有什么情况是使用多行 lambda 会让人感到困惑的?我听到的这个说法是真的吗,还是说 Python 不允许多行 lambda 是因为其他原因?
24 个回答
86
这通常看起来很糟糕(但有时候其他的选择更糟),所以一个解决办法是使用大括号表达式:
lambda: (
doFoo('abc'),
doBar(123),
doBaz())
不过,这种方法不允许你进行任何赋值,所以你得提前准备好数据。我发现这个方法在PySide这个封装库中很有用,因为有时候你需要写一些简短的回调函数。如果写额外的成员函数会显得更糟糕。通常情况下,你并不需要这样做。
例子:
pushButtonShowDialog.clicked.connect(
lambda: (
field1.clear(),
spinBox1.setValue(0),
diag.show())
184
看看下面的内容:
map(multilambda x:
y=x+1
return y
, [1,2,3])
这个 lambda 表达式是返回 (y, [1,2,3])
吗?这样的话,map 只会得到一个参数,就会出错。还是说它返回的是 y
?或者说这是个语法错误,因为新行上的逗号放错地方了?Python 怎么知道你想要什么呢?
在括号内,缩进对 Python 来说并不重要,所以你不能明确地处理多行代码。
这只是一个简单的例子,可能还有更多类似的情况。