【问题标题】:How external variables can be passed into the scope of lambda functions?如何将外部变量传递到 lambda 函数的范围内?
【发布时间】:2020-10-17 07:08:27
【问题描述】:

我想在另一个 lambda 函数中定义一个 lambda 函数,但是当我创建内部 lambda 函数时,外部 lambda 函数的参数据说是未定义的,就像这样。

# time, game, players... are defined above this line
result = filter(lambda x: (player == min(players, key=lambda y: time(game, y, x))), words)

然后,作为 time 函数参数之一的 x 被称为未定义变量。我通过 StackOverflow 搜索,发现可以使用默认值将 x 更改为lambda y, x=x: time(game, y, x) 将其传递到lambda y 的范围内。

我想知道为什么 x 不能直接在 lambda y 的范围内使用,就像 game, time() 在其中使用一样。 game, time, x不是lambda y范围之外的所有变量吗? x 和这些其他变量/函数有什么区别。

非常感谢!

【问题讨论】:

  • 你能不能把它变成一个可运行的例子,我们得到和你一样的错误?

标签: python function lambda scope closures


【解决方案1】:

我不确定您为什么会遇到问题。在像这样的最小示例中:

(lambda x: (lambda y: y+x)(3))(2)

你得到了预期的5,所以你所做的肯定有更多的东西。

【讨论】:

  • 我刚刚添加了错误信息的图片。由于程序运行正常,这只是我的 VS Code 编辑器的一些问题吗?
  • @tdelaney 这里的第一个 lambda 不返回第二个 lambda - 它在定义后立即被调用,所以不,它不是一个闭包。
  • @tdelaney 我的代码运行正常,尽管编辑器中有错误信息。
  • @IgorRivin 您能否详细说明为什么第一个 lambda 函数会立即被调用?您的示例和 tdelaney 的代码有什么区别?谢谢。
  • @DavidMa 代码是:(lambda y: y+x)(3)) 因此,我们定义了 lambda,并在参数 3 上调用它。 x u(2) sed 的值是从外部作用域获取的。
猜你喜欢
  • 2012-10-14
  • 1970-01-01
  • 2016-03-02
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
  • 2014-12-05
相关资源
最近更新 更多