Python 中没有多行 Lambda:为什么不呢?

新手上路,请多包涵

我听说不能在 Python 中添加多行 lambda,因为它们会在语法上与 Python 中的其他语法结构发生冲突。我今天在公交车上思考这个问题,意识到我想不出多行 lambda 与之冲突的单一 Python 结构。鉴于我非常了解这门语言,这让我感到惊讶。

现在,我确定 Guido 有理由不在语言中包含多行 lambda,但出于好奇:在什么情况下包含多行 lambda 会产生歧义?我听说的是真的,还是有其他原因导致 Python 不允许使用多行 lambda?

原文由 Imagist 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 519
2 个回答

请看以下内容:

 map(multilambda x:
      y=x+1
      return y
   , [1,2,3])

这是一个返回 (y, [1,2,3]) 的 lambda(因此 map 只获取一个参数,导致错误)?还是返回 y ?还是语法错误,因为新行上的逗号放错了位置? Python 怎么知道你想要什么?

在括号内,缩进对 python 无关紧要,因此您不能明确地使用多行。

这只是一个简单的例子,可能还有更多的例子。

原文由 balpha 发布,翻译遵循 CC BY-SA 2.5 许可协议

Guido van Rossum(Python 的发明者)在 一篇旧博客文章 中亲自回答了这个确切的问题。

基本上,他承认这在理论上是可行的,但任何提议的解决方案都是非 Pythonic 的:

“但对我来说,这个难题的任何提议解决方案的复杂性都是巨大的:它需要解析器(或更准确地说,词法分析器)能够在缩进敏感和缩进不敏感模式之间来回切换,保持堆栈

原文由 Eli Courtwright 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题