lambada函数的闭包特性

python

def create_callbacks():
    return [lambda: i for i in range(4)]

callbacks = create_callbacks()
print([cb() for cb in callbacks])

代码输出结果为 [3, 3, 3, 3]

原因解析:

  1. lambda 函数的闭包特性:在 create_callbacks() 中,列表推导式创建了四个 lambda 函数,每个函数都返回变量 i。但这些 lambda 函数并没有在定义时捕获 i 的当前值,而是捕获了变量 i 本身(即引用)。
  2. 变量 i 的最终值:当循环 for i in range(4) 结束时,i 的值为 3。由于所有 lambda 函数共享同一个变量 i 的引用,因此当它们被调用时(在 print([cb() for cb in callbacks]) 中),都会使用 i 的最终值 3。

如何修正(如需捕获当前值):

如果想实现每个 lambda 返回对应的 i 值(即 [0, 1, 2, 3]),可以使用默认参数绑定当前值:

python

def create_callbacks():
    return [lambda x=i: x for i in range(4)]  # 通过默认参数固化当前 i 的值

callbacks = create_callbacks()
print([cb() for cb in callbacks])  # 输出 [0, 1, 2, 3]

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务