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

标签 python lambda

这个问题在这里已经有了答案:





Dictionary With Lambda Values Updates All Entries

(1 个回答)


3年前关闭。



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 本身。

最佳答案

丑陋,但一种方式:

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

(所有代码未经测试。)

关于python - 在 lambda 表达式中使用变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/760688/

相关文章:

python - 尝试在加载的 QPixMap 图像上绘画时崩溃

java - 避免 Lambda 中的冗余函数调用

Java 8 Bifunction 内的 MapcomputeIfPresent boolean 检查

python - 连接多个 USB 摄像头

python - 无法使用 openpyxl 加载工作簿 : during handling of the above exception, 发生另一个异常

python - Django 不级联删除

c# - 是否可以获取 IQueryable<T> 上使用的谓词 (Expression<Func<T,bool>>) 并将其应用于另一个 Lambda 函数?

python - 如何安装 skgstat?

java - 如何将一个列表划分为一个较小的列表

c# - "Cannot convert lambda expression to type ' string ' because it is not a delegate type"在C#中查询数据集