【问题标题】:List comprehension with lambda function [duplicate]使用 lambda 函数的列表理解
【发布时间】:2018-09-12 00:44:06
【问题描述】:
def multipliers():
    return [lambda x: i * x for i in range(4)]


print([m(1) for m in multipliers()]) # [3, 3, 3, 3]

为什么不是[0, 1, 2, 3]?无法理解。那么,出于某种原因,我们在所有 lambda 表达式中都有 i = 3 吗?为什么?

【问题讨论】:

    标签: python


    【解决方案1】:

    这是因为 Python late binding closures。您可以通过以下方式解决问题:

    def multipliers():
        return [lambda x, i=i : i * x for i in range(4)]
    

    【讨论】:

      【解决方案2】:

      这是你想要做的吗?

      def multipliers(x):
          return [i * x for i in range(4)]
      
      print(multipliers(1)) 
      
      >> [0, 1, 2, 3]
      

      【讨论】:

      • 如果我们要简化,为什么不只是print ([0, 1, 2, 3])? OP 已询问 他们的 代码有什么问题。
      • @EugeneSh。为什么停在那里? print('[0,1,2,3]') 更容易获得资源
      猜你喜欢
      • 2020-01-15
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 2018-12-13
      • 1970-01-01
      相关资源
      最近更新 更多