如何在Python中使用for循环生成多个函数?

Ivy*_*eng 7 python

我试图使用for循环生成具有不同参数i(见下文)的几个函数,但似乎所有这些函数都使用了i的最后一项.有谁能告诉我如何处理这个?

这是一个简化的例子.我实际上需要使用不同的参数生成200多个函数.

funs = ()
for i in range(2):
    f = lambda x: x+i
    funs += (f,)
Run Code Online (Sandbox Code Playgroud)

然后事实证明这两个函数做同样的事情:

funs[0](1)
Run Code Online (Sandbox Code Playgroud)

输出:2

funs[1](1)
Run Code Online (Sandbox Code Playgroud)

输出:2

但我希望第一个函数给出1而不是2的结果.

非常感谢你提前.

Jea*_*bre 5

你必须打破动态绑定i,例如将2个lambdas包装在一起:

f = (lambda p : lambda x: x+p)(i)
Run Code Online (Sandbox Code Playgroud)

这样,i捕获的值,函数保存副本i

旁白:tuple当附加到funs(funs = ()=> funs = [])时,我不会出于性能原因而创建列表


ita*_*chi 5

你为所有函数得到相同结果的原因是因为ilambda不是本地的,而是在外部作用域中定义,并且在调用lambda时访问它 - 而不是在定义它时.在循环结束时,值为i1,因此,每次调用lambda函数时使用1.

Jean-Francois Fabre给出了一个很好的解决方案,但我个人更喜欢这个:

list_ = []
for i in range(2):
    f = lambda x, n=i: x+n
    list_.append(f)
Run Code Online (Sandbox Code Playgroud)