【问题标题】:List Comprehensions, Scoping and Lambdas in Python [duplicate]列出 Python 中的理解、范围和 Lambdas [重复]
【发布时间】:2021-02-15 20:08:53
【问题描述】:

假设我想要一个函数族f[0], f[1], ... f[9],这样f[y](x) = x + 2 * y。

为了实现这一点,我尝试了以下列表理解:

fs = [(lambda x : x + 2 * y) for y in range(10)]

但是,这根本不起作用。例如,fs[0](2) 的计算结果为 20,而不是所需的 4。

这里发生了什么?这是一些奇怪的范围问题吗?

我也尝试过[(lambda x: x + 2 * y) for y in the list(range(10))] 之类的方法,但这些都没有帮助。

【问题讨论】:

    标签: python lambda scope list-comprehension higher-order-functions


    【解决方案1】:

    y 可能是它设置的最后一个值

    将其设置为 lambda 的默认参数

    [(lambda x, _y=y : x + 2 * _y) for y in range(10)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      相关资源
      最近更新 更多