【问题标题】:Why Python does not allow statements in the local scope of a lambda expression? [closed]为什么 Python 不允许在 lambda 表达式的本地范围内使用语句? [关闭]
【发布时间】:2014-05-24 07:23:25
【问题描述】:

我找到了这个页面:

http://effbot.org/pyfaq/why-can-t-lambda-forms-contain-statements.htm

不过,原因还不是很清楚。 Lambda 很强大,在我看来,如果可以在其范围内使用语句/赋值,它们会更强大。

例如:

y = 0
f = lambda x: y = 5, x+y # Statements first, expression later.
print f(5) # 10

一定有人考虑到了这一点,并且没有实现它一定是有原因的(也许是为了避免过度使用它们而不是微不足道的def?)。

【问题讨论】:

  • 为什么不lambda x: x + 5?此外,stackoverflow.com/questions/1233448/… 的可能重复项
  • @JesseMu:虽然我不会说完全重复,但第二个答案是,我相信 OP 正在寻找什么。
  • 因为它使可读性变差。也给匿名函数起名字有点不合时宜。

标签: python lambda scope expression


【解决方案1】:

首先需要了解lambda 构造创建了一个表达式,该表达式的计算结果为创建的函数。这与def 非常不同,def 是一个语句,通过将创建的函数绑定到指定名称的副作用起作用。要使lambda 完全有用,它必须是一个表达式,否则你不能将它嵌套在其他表达式中。

正如链接的常见问题解答所解释的那样,不允许其他 Python 表达式嵌套语句。这是因为 Python 语言的核心语法权衡排除了这种可能性,例如persuasively argued by Guido。由于有一个非常简单的解决方法,即使用def,因此认为不值得扭曲语言的语法以适应lambda 中的语句。

还要注意lambda 不是语言中唯一需要表达式的地方。您不能将语句放在ifwhile 的测试中,也不能放在for 语句所需的表达式中。然而这被认为是一件好事——如果你需要那里的语句,只需将它们提取到一个函数中并调用它。 lambda 完全相同。

【讨论】:

    【解决方案2】:

    两者有什么区别:

    f = lambda x: y = 5; x+y
    

    def f(x):
        y = 5
        return x+y
    

    ?

    后者更具可读性,它具有一致的语法,并且与您的 lambda 定义相比,您唯一需要编写的代码是 return。所以不需要你建议的,只有更复杂的规则。

    【讨论】:

      猜你喜欢
      • 2021-10-29
      • 2018-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      • 1970-01-01
      • 2016-02-24
      • 1970-01-01
      相关资源
      最近更新 更多