You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python循环中绑定函数的正确方式及lambda闭包问题简易解法

解决Python循环批量绑定lambda时的迟绑定问题

你这段代码里,循环创建的lambda函数调用后都输出了1,而非预期的0和1,核心原因是lambda对变量i采用迟绑定——直到函数被调用时才会去读取i的当前值,而循环结束后i已经是1,所以所有lambda都使用了这个最终值。

下面是两种简易解决方法:

方法1:给lambda添加默认参数捕获当前值

修改循环内的lambda,通过默认参数i=i把当前循环的i值直接绑定到lambda内部,避免后续变量变化影响:

def cus_print(func):
    func()

def main():
    a = []
    for i in range(2):
        # 添加默认参数捕获当前i的数值
        a.append(lambda i=i: print(i))

    for each in a:
        cus_print(each)

if __name__ == '__main__':
    main()

运行结果:

0
1

方法2:使用functools.partial绑定参数

借助functools.partial工具,提前把print函数和当前循环的i值绑定,生成独立的绑定函数:

from functools import partial

def cus_print(func):
    func()

def main():
    a = []
    for i in range(2):
        # 绑定print的参数为当前循环的i
        a.append(partial(print, i))

    for each in a:
        cus_print(each)

if __name__ == '__main__':
    main()

运行结果:

0
1

内容的提问来源于stack exchange,提问作者SuiFengPiaoYang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:10:20