Python学习笔记 - 闭包

本文深入解析Python闭包的概念,通过实例展示其如何保存函数状态,实现计数器和线性运算的功能,使代码更加简洁高效。

Python的闭包和JavaScript中的闭包很像,形式都是一个函数的返回值为另一个函数,返回出来的这个函数引用了它外层函数的变量。例子:

def foo(a):
    def bar(b):
        return a + b
    return bar

add_one = foo(1)

print(add_one(1)) # 2
print(add_one(2)) # 3
print(add_one(3)) # 4
复制代码

闭包的作用

  • 让函数内部的变量在执行完毕后不被回收

    例子:

    # 计数器,每调用一次就加一
    
    def counter():
        counts = 0
        def add_one():
            nonlocal counts
            counts += 1
            return counts
        return add_one
    
    counter_1 = counter()
    print(counter_1()) # 1
    print(counter_1()) # 2
    print(counter_1()) # 3
    print(counter_1()) # 4
    复制代码
  • 在某些情况下更为简洁

    例子:

    # 做一个运算 a * x + b,x可变,a,b固定
    
    def line(a, b):
        return lambda x: a * x + b
    
    line_1 = line(10, 20)
    line_2 = line(100, 200)
    
    print(line_1(5)) # 70
    print(line_1(6)) # 80
    print(line_1(7)) # 90
    
    print(line_2(5)) # 700
    print(line_2(6)) # 800
    print(line_2(7)) # 900
    复制代码

    从例子中可以看出,可以给定a,b的值,然后每次修改x的时候,只传入x就可以了。这样是不是更简洁,每个人的看法可能会不同。

转载于:https://juejin.im/post/5c33334a6fb9a049ad7736e3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值