【问题标题】:Lambda function range() get one number alwaysLambda 函数 range() 总是得到一个数字
【发布时间】:2023-02-17 21:13:07
【问题描述】:
def multipliers():
    return [lambda x: i * x for i in range(3)]

print([m(2) for m in multipliers()])

如何修复此 lambda 函数?
我除了:
[0, 2, 4]
我有:
[4, 4, 4]

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    这与lambdas 如何捕获姓名i,而不是它的值(并且该 listcomp 中名称 i 的最后一个值将是 2)。

    再添加一个具有本地名称 i 的函数:

    def make_multiplier(x):
        return lambda y: x * y
    
    def multipliers():
        return [make_multiplier(i) for i in range(3)]
    
    print([m(2) for m in multipliers()])
    

    【讨论】:

      【解决方案2】:

      lambda 也是一个具有局部作用域的函数。要将每个 lambda 绑定到相应的 i 计数器,您可以将其作为具有默认值的参数传递:

      def multipliers():
          return [lambda x, i=i: i * x for i in range(3)]
      
      print([m(2) for m in multipliers()])  # [0, 2, 4]
      

      【讨论】:

        猜你喜欢
        • 2012-12-22
        • 2013-06-17
        • 2011-04-03
        • 1970-01-01
        • 2016-02-28
        • 2022-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多