在lambda表达式中使用变量的值

Emr*_*ril 4 python lambda

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, ...
Run Code Online (Sandbox Code Playgroud)

在for循环中,i作为变量传递给lambda,所以当我调用它时,使用i的最后一个值代替运行的代码,就像使用[]一样.(即b [0]应使用x ^ 1,b [1]应使用x ^ 2,...)

我如何告诉lambda获取i的值而不是变量i本身.

Dar*_*con 6

丑陋,但有一种方式:

for i in range(4)
    b.append(lambda x, copy=i: x**copy)
Run Code Online (Sandbox Code Playgroud)

你可能更喜欢

def raiser(power):
    return lambda x: x**power

for i in range(4)
    b.append(raiser(i))
Run Code Online (Sandbox Code Playgroud)

(所有代码未经测试.)