修饰器

本文深入探讨了Python装饰器的工作原理及其应用场景,包括日志记录、性能测试等,并通过实例展示了如何使用装饰器来增强函数的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python 中的函数和 Java、C++不太一样,Python 中的函数可以像普通变量一样当做参数传递给另外一个函数,例如: 

def foo():
    print("foo")

def bar(func):
    func()

bar(foo)

装饰器本质上是一个 Python 函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,装饰器的返回值也是一个函数/类对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景,装饰器是解决这类问题的绝佳设计。有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码到装饰器中并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

def outer(f):
        print ('some message com from outer function')
        def inner(*arg):
                print ('before function')
                f(3, 6)
        print ('after function')
 
        return inner
 
@outer
def func(a, b): 
        print (func.__name__)                      
        print ('a = %s, b = %s' % (a, b))
 
if __name__=='__main__':
        print ('start')
        func()
        print ('end')

 

some message com from outer function
after function
start
before function
inner
a = 3, b = 6
end

整段代码的执行流程:

    整个模块加载完毕,解释器将代码装换为语法树,解释器对 @ 进行解释时,实际上执行:

  1. func = outer(func)    #根据输出结果可以看出

  2. 执行__name__=='__main__' 打印出 start

  3. 因为解释器对函数func进行了解释,所以可以用打印出func.__name看到func 变成了 inner 函数,其实在if __name__执行func()的时候,是在执行上面outer里面的inner函数

  4. 执行__name__=='__main__' 打印出 stop

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值