a = [] a.append(lambda x:x**0)
a.append(lambda x:x**1)
a[0](2), a[1](2), a[2](2)... spits out 1, 2, 4, ...
b=[]
for i in range(4)
b.append(lambda x:x**i)
b[0](2), b[1](2), b[2](2)... spits out 8, 8, 8, ...
在for循环中,i作为变量传递给lambda,所以当我调用它时,使用i的最后一个值代替运行的代码,就像使用[]一样。 (即b [0]应使用x ^ 1,b [1]应使用x ^ 2,...)
我怎样才能告诉lambda获取i的值而不是变量i本身。
答案 0 :(得分:6)
丑陋,但有一种方式:
for i in range(4)
b.append(lambda x, copy=i: x**copy)
您可能更喜欢
def raiser(power):
return lambda x: x**power
for i in range(4)
b.append(raiser(i))
(所有代码未经测试。)
答案 1 :(得分:2)
b=[]
f=(lambda p:(lambda x:x**p))
for i in range(4):
b.append(f(i))
for g in b:
print g(2)
答案 2 :(得分:2)
定义工厂
def power_function_factory(value):
def new_power_function(base):
return base ** value
return new_power_function
b = []
for i in range(4):
b.append(power_function_factory(i))
或
b = [power_function_factory(i) for i in range(4)]