当前位置 博文首页 > 详解Python的lambda函数用法

    详解Python的lambda函数用法

    作者:iukede 时间:2021-08-08 18:24

    lambda函数用法

    lambda非常重要的一个定义。lambda在【运行时】才绑定,【不是】在定义的时候绑定。下面这个列子:
    本意想:让X分别与0到1的数相加。x+0,x+1,x+2,x+3
    实际运行结果是:

    0
    0
    0
    0

    原因就是上面提到的,运行时才绑定。先运行的for循环,无法捕捉到循环。

    func = [lambda x: x + n for n in range(4)]  # x+n,n是从0到3 For循环,x+0,x+1,x+3
    for f in func:
        print(f(0))  # 打印func列表的第一个数据。

    ——————————————————————
    修改后的代码:增加了n=n

    func = [lambda x,n=n:x+n for n in range(4)]
    for f in func:
        print(f(0))

    运行结果:

    0
    1
    2
    3

    这是我们想达到的结果。n=n,就是在定义时捕捉。

    原因:

    n是自由变量,执行时才能确定。
    我们把n变成参数就可以了,因为参数可以在定义时绑定变量。
    ——————————————————————
    下面的例子很奇怪:

    h = 1
    a = lambda k: h + k
    h = 2
    b = lambda k: h + k
    print(a(3))
    print(b(3))

    运行结果:

    5
    5

    我们赋值的h=1根本没被使用。始终做计算3+2。
    h=1
    h=2
    都是全局变量,就会以最后一个为准。
    ——————————————————————
    修改后

    h = 1
    a = lambda k,h=h: h + k
    h = 3
    b = lambda k,h=h: h + k
    print(a(10))
    print(b(10))

    运行结果:

    11
    13

    ——————————————————————

    h = 1
    h = 100
    a = lambda k,h=h: h + k
    h = 3
    b = lambda k,h=h: h + k
    print(a(10))
    print(b(10))

    结果:

    110
    13

    上面最后的例子,发现h=1,h=100,只选择100参与计算。100+10=110 因为h=1,h=100都是全局,以最后为准。python代码从上到下运行的。

    jsjbwy
    下一篇:没有了