Python 装饰器执行过程详解

简介: Python 装饰器执行过程详解

一、前置说明


1、本节目标

  • 了解装饰器的执行过程。


2、相关回顾


二、主要内容


1、Demo 示例

def decorator1(func):
    def wrapper1():
        print("Decorator 1")
        func()
    return wrapper1
def decorator2(func):
    def wrapper2():
        print("Decorator 2")
        func()
    return wrapper2
@decorator1
@decorator2
def my_function():
    print("Original function")
my_function()


输出结果:

Decorator 1
Decorator 2
Original function


2、过程分析

  • 首先,@decorator2my_function 上应用了 decorator2装饰器,相当于执行 my_function = decorator2(my_function)decorator2(my_function) 的执行结果为 wrapper2,所以,此时 my_function 就是 wrapper2 的引用。
  • 然后,@decorator1 在已经被 decorator2 装饰过的 my_function 上再次应用了decorator1装饰器。这相当于执行了my_function = decorator1(decorator2(my_function)),即 my_function = decorator1(wrapper2)decorator1(wrapper2) 的执行结果为 wrapper1,所以,此时 my_functionwrapper1 的引用。
  • 当调用 my_function() 时,等同于执行 wrapper1() ,"Decorator 1"被打印出来,然后执行 func()
  • 此时 funcwrapper2func() 相当于执行 wrapper2(), “Decorator 2” 被打印出来,然后执行 func()
  • 此时 funcmy_functionfunc() 相当于执行 my_function(),"Original function"被打印出来。
  • 执行结束。


三、后置说明


1、要点小结

  • 当调用 my_function() 时,实际上是调用了经过两个装饰器包装后的新函数。
  • 执行顺序是先执行最外层的 decorator1,再执行内层的 decorator2,最后执行原始函数。


2、下节准备

  • @functools.wraps 的作用

点击进入《Python装饰器从入门到进阶》总目录

目录
相关文章
|
7月前
|
测试技术 Python
Python装饰器:为你的代码施展“魔法”
Python装饰器:为你的代码施展“魔法”
379 100
|
8月前
|
设计模式 缓存 监控
Python装饰器:优雅增强函数功能
Python装饰器:优雅增强函数功能
370 101
|
7月前
|
缓存 Python
Python装饰器:为你的代码施展“魔法
Python装饰器:为你的代码施展“魔法
449 88
|
8月前
|
缓存 测试技术 Python
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
303 99
|
8月前
|
存储 缓存 测试技术
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
500 98
|
8月前
|
缓存 Python
Python中的装饰器:优雅地增强函数功能
Python中的装饰器:优雅地增强函数功能
|
8月前
|
存储 缓存 测试技术
理解Python装饰器:简化代码的强大工具
理解Python装饰器:简化代码的强大工具
|
8月前
|
缓存 测试技术 Python
解锁Python超能力:深入理解装饰器
解锁Python超能力:深入理解装饰器
205 2
|
8月前
|
设计模式 缓存 运维
Python装饰器实战场景解析:从原理到应用的10个经典案例
Python装饰器是函数式编程的精华,通过10个实战场景,从日志记录、权限验证到插件系统,全面解析其应用。掌握装饰器,让代码更优雅、灵活,提升开发效率。
601 0

推荐镜像

更多