代码之家  ›  专栏  ›  技术社区  ›  zo Aoo

当我在lambda函数中更改变量名时,结果会更改[重复]

  •  -2
  • zo Aoo  · 技术社区  · 2 年前

    a = []
    for i in range(3):
        a.append(lambda a:i+a)
    

    当我执行以下代码时:

    for j in range(3):
        print(a[j](0))
    

    2
    2
    2
    

    但是当我更改变量名并执行相同的操作时:

    for i in range(3):
        print(a[i](0))
    

    我不能得到同样的结果:

    0
    1
    2
    

    1 回复  |  直到 2 年前
        1
  •  0
  •   Carl HR    2 年前

    您没有将变量的值保存在lambda中。您正在保存在lambda之外定义的变量。它不一定是全局变量,但在lambda的范围内,它在lambda之外声明。当迭代终止时 i 是2。这就是为什么当您使用for循环进行迭代时 j ,lambda内的值始终为 2 .

    当您使用 一、 变量,您再次改变 在执行lambda之前。这就是为什么它会给你一个不同的结果。

    a = []
    for i in range(3):
        a.append((lambda k: lambda x:(k+x))(i))
    

    lambda k: ... 用于传递状态 一、 lambda x: (k+x) 哪里 k 是lambda范围中的私有变量。

    j ,或为其指定新值 一、 k

    i = 256
    k = 512
    
    for j in range(3):
        print(a[j](0))
    

    0
    1
    2