Python闭包和修饰器

Python闭包和装饰器详解

1. 闭包(Closure)

闭包是Python中一个重要的概念,涉及嵌套函数和变量的作用域。
概念:

  • 内外函数嵌套:闭包的形成通常涉及到一个外部函数和一个内部函数。
  • 内函数引用外函数作用域下的非全局变量:内部函数可以访问外部函数作用域内的变量,即使外部函数已经执行完毕。
  • 外函数返回内函数对象:外部函数返回内部函数的引用,使得内部函数可以访问并操作外部函数作用域内的变量。
    定义:
  • 第一种方式:返回内函数引用。例如:
    def outer():
        a = 10
        def inner():
            print(a)
        return inner
    outer()()  # 输出10
    
  • 第二种方式:返回内函数调用。例如:
    def outer1(a):
        def inner():
            print(a)
        return inner()
    outer1(20)  # 输出20
    
2. 装饰器(Decorator)

装饰器是Python中另一个强大的功能,它可以在不修改原函数的基础上增加新功能。
概念:

  • 装饰器可以在不改变原函数的基础上给函数增加新的功能,利用了闭包的思路。
    使用:
  • 装饰器的使用方法是在原函数上方使用 @装饰器名字
    简单装饰器:
  • 例如,以下是一个简单装饰器,用于在函数执行前打印一条消息:
    def outer(f):
        def inner():
            print("请进行自我介绍")
            f()
        return inner
    @outer
    def func():
        print("我是函数func")
    func()  # 先打印"请进行自我介绍",然后打印"我是函数func"
    

装饰器的实现:

  • 装饰器分为无参装饰器和有参装饰器两种,都是通过函数嵌套和闭包实现的。
  • 例如,以下是一个计算函数执行时间的装饰器:
    import time
    def timer(func):
        def wrapper(*args, **kw):
            start_time = time.time()
            func(*args, **kw)
            stop_time = time.time()
            cost_time = stop_time - start_time
            print("花费时间:{}秒".format(cost_time))
        return wrapper
    @timer
    def test():
        time.sleep(3)
    test()  # 输出函数执行花费的时间
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值