Advertisement

Python lambda 在列表推导式中的闭包问题

阅读量:

一、面试题解析与启示

请提供以下代码执行后的输出结果

复制代码
    li = [lambda : x for x in range(10)]
    ret = li[0]()
    
    print(ret)
    
    
      
      
      
      
    

最终得出的结论为9,令人意外的是,在li列表中所包含的所有匿名函数执行后的结果均显示为9。

在这里插入图片描述

二、闭包产生的影响

Python 闭包所引发的延迟绑定特性,使得在内部函数执行时才会对变量进行查找。因此,当任意一个 li 列表中的匿名函数被调用时,x 的值将依据调用时的外部作用域进行确定。由于所有 lambda 函数均在 for 循环结束后才被调用,此时 x 的最终值为 9,从而导致每一个 lambda 函数所返回的结果均为 9。

通过以下图表可以更加直观地理解这一列表推导式的运行机制。

![在这里插入图片描述](https://ad.itadn.com/c/weblog/blog-img/images/2025-05-31/RD7ea

全部评论 (0)

还没有任何评论哟~