Use variable value in lambda expression

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, ...

In the for loop, I pass lambda as a variable, so when I call it, the last value I use instead of code that executes the same way as with []. (ie b [0] should use x ^ 1, b [1] should use x ^ 2, ...)

How can I tell lambda to select i instead of i itself.

+3
source share
3 answers

Awful, but in one way:

for i in range(4)
    b.append(lambda x, copy=i: x**copy)

You may prefer

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

for i in range(4)
    b.append(raiser(i))

(All code is not verified.)

+6
source
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
source

Single factory

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))

or

b = [power_function_factory(i) for i in range(4)]
+2
source

All Articles