部分申请功能列表

时间:2015-10-05 09:54:14

标签: python lambda partial-application

您如何部分应用功能列表?以下最小例子:

def myprint(a,b):
    print 'a: '+str(a)+', b: '+str(b)


l1=[lambda x:myprint('x',x), lambda y:myprint('y',y)]
l2=[]

for f in l1:
    l2.append(lambda:f('!'))

for g in l2:
    g()

给出了这个输出:

a: y, b: !
a: y, b: !

(Naively)预计将是

a: x, b: !
a: y, b: !

但是,lambda:f('!')仅在最后一个循环中执行。然后f将保留其第一个循环的值,即l1中的最后一个元素。然后在l2中的两个不同的 lambda中使用最后一个元素。

我的问题: 你如何使它按预期工作?

0 个答案:

没有答案