考虑以下代码(详情如下):
def add(a):
def f(x):
return x+a
return f
def times(a,b):
return a*b
def adlist(A,B):
add_a = map(add,A)
add_b = map(add,B)
return [ lambda x : times(f(x),g(x)) for (f,g) in zip(add_a,add_b)]
(f,g) = adlist([0,1],[0,1])
我希望此时f(x)= x * x和g(x)=(x + 1)*(x + 1)但是
print f(0) # 1
print g(0) # 1
事实上,f(x)= g(x)=(x + 1)*(x + 1)。
问题:为什么会这样?怎么解决? (鉴于我无法修改函数add
和times
。)
详细信息:考虑排序f(x)=(x + a)*(x + b)的函数。在python中,很容易编写一个函数,它将a和b作为输入并返回函数f。
然而,我需要的是更复杂一点,我需要一些东西,需要列表A = [a1,...]和B = [b1,...]并返回相应的函数列表[f1 ,. ..]其中f1(x)=(x + a1)*(x + a2)。实际的功能比加法和乘法更复杂。我上面的尝试似乎不起作用。