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

Python创建带初始化参数的函数指针列表并正确调用

问题

运行以下Python代码时,所有lambda函数都会打印4,但期望每个函数打印其创建时对应的i值(即依次输出0、1、2、3、4),该需求用于大型多线程项目的蓝图实现:

def foo(stuff):
    print(stuff)

fun_list = [lambda :foo(i) for i in range(5)]

for fun in fun_list:
    fun()
解决方案

方法1:通过lambda默认参数绑定当前值

给lambda添加带默认值的参数,让i在定义时就被固定下来,而非调用时才引用外部变量:

def foo(stuff):
    print(stuff)

fun_list = [lambda i=i: foo(i) for i in range(5)]

for fun in fun_list:
    fun()

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

借助functools.partial预先把i绑定到foo的参数上,生成新的函数:

from functools import partial

def foo(stuff):
    print(stuff)

fun_list = [partial(foo, i) for i in range(5)]

for fun in fun_list:
    fun()

方法3:用生成器函数封装闭包

写一个单独的函数来创建lambda,确保每次迭代的i处于独立作用域:

def foo(stuff):
    print(stuff)

def create_foo_func(i):
    return lambda: foo(i)

fun_list = [create_foo_func(i) for i in range(5)]

for fun in fun_list:
    fun()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:01:17