在lambda表达式中使用变量值

6 投票
3 回答
3922 浏览
提问于 2025-04-15 11:09
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的最后一个值,而不是像a[]那样逐个运行代码。(也就是说,b[0]应该用x的1次方,b[1]应该用x的2次方,依此类推。)

我该如何告诉lambda函数去使用i的值,而不是变量i本身呢?

3 个回答

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)

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

4

定义一个工厂

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

虽然看起来不太好,但这是一种方法:

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

(所有代码都没有经过测试。)

撰写回答