首页 > 编程语言 >python装饰器执行顺序

python装饰器执行顺序

时间:2023-09-27 15:25:35浏览次数:35  
标签:顺序 python decorator2 Executing def func 装饰 decorator1

Python的装饰器是应用的函数或方法的特殊类型改变,它们会在被装饰的函数或方法被调用时执行。你可以使用多个装饰器来装饰一个函数,装饰器的执行顺序与它们应用的顺序有关。

# 使用两个装饰器装饰一个函数
@decorator1
@decorator2
def func():
    pass

在上述代码中,首先应用的装饰器是decorator2,然后应用的装饰器是decorator1。可以这样理解,当你调用func()时,首先执行装饰器 decorator2 对 func 进行装饰,然后执行装饰器 decorator1 对已经被 decorator2 装饰过的 func 进行装饰。

也就是说装饰器的顺序是从下到上(也就是说,最接近函数定义的装饰器最先被应用),或者你可以将其视为从内到外(也就是说,最接近函数定义的装饰器最先被应用)。

下面是一个具体示例,理解装饰器顺序:

def decorator1(func):
    def wrapper():
        print("Executing decorator1")
        func()
    return wrapper

def decorator2(func):
    def wrapper():
        print("Executing decorator2")
        func()
    return wrapper

@decorator1
@decorator2
def hello_world():
    print("Hello, world!")

hello_world()

# 输出:
# Executing decorator1
# Executing decorator2
# Hello, world!

在上述代码中,你可以看到decorator1是先执行的,然后才是decorator2,也就说明装饰器是从内到外(或者从下到上)执行的。

标签:顺序,python,decorator2,Executing,def,func,装饰,decorator1
From: https://www.cnblogs.com/mlllily/p/17732780.html

相关文章

  • python爬取手机壁纸
    无聊随便玩玩,要爬成功还早着呢,代码很乱可以整理,写了就记录一下吧,有机会再改。importrequestsimportosfrombs4importBeautifulSoupfromrequests.packagesimporturllib3importrandomimportthreadingimporttimeurllib3.disable_warnings()start_page=1end_......
  • Python工具箱系列(四十三)
    tar文件操作tar命令是Unix/Linux平台用的最多的命令之一。原始的tar只具备打包和解包的功能:TapeARchive,本义就是把文件打包备份到磁带机。GNU为tar增加了很多新功能,比如支持各种压缩格式。在Unix中一切都是文件:普通文件,文件夹,符号链接,设备文件等等。tar包就是由一个个文件顺序排......
  • python DAY4
    有时候输入时候就可以解决处理问题,比如下面这种做法:  记得这种写法:这个写法算的是从1到x。  当无法判断有多少个输入样例时候,持续输入的大条件可以是: 赋值可以这么写: 这样就能避免赋值错误   for语句实际上是遍历一个集合,上图是遍历字符串 ......
  • python numpy 数组操作
          ......
  • macOS下安装python3
    使用brew安装python3brewinstallpython3Running`brewupdate--auto-update`...==>Downloadinghttps://ghcr.io/v2/homebrew/portable-ruby/portable-ruby/blobs/sha256:61029cec31c68a1fae1fa90fa876adf43d0becff777da793f9b5c5577f00567a#########################......
  • [891] Combine multiple dictionaries in Python
    TocombinemultipledictionariesinPython,youcanuseanyofthemethodsmentionedearlierforcombiningtwodictionaries.Youcanrepeatedlyapplythesemethodstomergemultipledictionariesintoone.Here'showyoucandoit:Usingtheupdate()......
  • Python语法(4)
    Python语法(4)这次我们讲的是字符串,这是我认为特别重要的地方!!!1.字符与整数之间的联系每个常用字符其实都有一个对应的整数表示,二者之间可以相互转化,整数范围大概是-128-127,二者之间是可以相互转化的,但是要注意的是目前没有出现负数与之对应的字符将字符转化成对应的ASCII码用o......
  • 用 Python 绘制现金流量图
    用Python绘制现金流量图最近在学习工程经济学,经常要绘制现金流量图。希望能用Python更方便地绘制现金流量图。但是我在网上找了一圈,发现网上的教程画出来的现金流量图根课本里的不太一样。在网上看到的常见的教程里面告诉你的方法都是直接把现金流量图绘制成柱状图或者折线图......
  • c#装饰器模式详解
    基础介绍:  动态地给一个对象添加一些额外的职责。适用于需要扩展一个类的功能,或给一个类添加多个变化的情况。  装饰器,顾名思义就是在原有基础上添加一些功能。  大家都只知道如果想单纯的给原有类增加一些功能,可以直接继续该类生成一个子类就可以。  举个例子,如果现......
  • Python 基础知识结构
    一、关键字1、return2、if3、elif4、else5、for6、while二、内置函数1、print()2、max()3、min()4、len()5、range()6、enumerate()4、input()5、type()6、int()三、运算符+-*///=+=-=>>===%三目运算符in成员运算符1、算数运算符+加数字与字符串拼接-......