Python中的装饰器

顾名思义,函数装饰器就是对这个函数进行了装饰,比如在函数的前后进行日志打印等。在Python中,装饰器是一种特殊的语法,用于简化函数或方法的定义和调用。装饰器允许你在不修改原始函数代码的情况下,通过在其上应用装饰器来添加或修改其行为。装饰器通常以 @decorator 的形式使用。装饰器是一种灵活且强大的技术,广泛用于Python中。它们常用于日志记录、性能分析、权限检查等场景。你也可以组合多个装饰器,以便在一个函数上应用多个修饰行为。

一.装饰器例子

以下是一个简单的装饰器的例子,展示了如何创建和使用它:

复制代码
# 定义一个简单的装饰器
def my_decorator(func):
    def wrapper():
        print("Something is happening before the function is called.")
        func()
        print("Something is happening after the function is called.")
    return wrapper

# 使用装饰器
@my_decorator
def say_hello():
    print("Hello!")

# 调用被装饰后的函数
say_hello()

输出结果,如下所示:

复制代码
Something is happening before the function is called.
Hello!
Something is happening after the function is called.

在这个例子中,my_decorator 是一个装饰器函数,它接受一个函数 func 作为参数,然后返回一个新的函数 wrapper,该函数在调用原始函数 func 前后执行一些额外的操作。使用 @my_decorator 语法将 say_hello 函数应用了这个装饰器,使得在调用 say_hello 时,实际上调用的是装饰后的函数 wrapper

二.装饰器的详细执行顺序和 return wrapperwrapper具体指代

  1. 装饰器的详细执行顺序
    • 当你使用 @my_decorator 将装饰器应用于函数时,实际上是将被装饰的函数传递给装饰器函数作为参数。在上面的例子中,say_hello 函数被传递给 my_decorator 装饰器。
    • 装饰器函数 my_decorator 接收这个函数(在这里是 say_hello)并返回一个新的函数(在这里是 wrapper)。
    • 当你调用被装饰后的函数 say_hello 时,实际上调用的是装饰器返回的新函数 wrapper。因此,wrapper 函数中的逻辑会在原始函数执行前后运行。
  2. return wrapperwrapper具体指代
    • my_decorator 中,wrapper 是一个内部函数。这个内部函数用于包裹原始函数,并在调用原始函数之前和之后执行一些额外的逻辑。
    • 当你调用 my_decorator 装饰器时,它返回的是 wrapper 函数。这就是为什么装饰器中通常包含 return wrapper 的原因。
    • wrapper 函数的目的是在不修改原始函数代码的情况下,为原始函数添加额外的功能。

简单理解,总体的执行流程是:调用 my_decorator 装饰器,并传递原始函数 say_hellomy_decorator 返回一个新的函数 wrapper,代表着装饰后的函数;当调用被装饰后的函数 say_hello 时,实际上是调用了 wrapper 函数;在 wrapper 函数内部,首先执行 "Something is happening before the function is called.",然后调用原始函数 func(即 say_hello),接着执行 "Something is happening after the function is called."


NLP工程化

1.本公众号以对话系统为中心,专注于Python/C++/CUDA、ML/DL/RL和NLP/KG/DS/LLM领域的技术分享。

2.本公众号Roadmap可查看飞书文档:https://z0yrmerhgi8.feishu.cn/wiki/Zpewwe2T2iCQfwkSyMOcgwdInhf
NLP工程化
飞书文档

相关推荐
Q_Q5110082852 分钟前
python的保险业务管理与数据分析系统
开发语言·spring boot·python·django·flask·node.js·php
王小王-12310 分钟前
基于Python的程序员数据分析与可视化系统的设计与实现
python·数据挖掘·数据分析·招聘数据分析·程序员数据分析·招聘薪资数据分析·智联招聘可视化
昀贝38 分钟前
Maven项目引用本地jar涉及scope和systemPath配置
python·maven·jar
Stuomasi_xiaoxin1 小时前
服务器重装后如何“复活”旧硬盘上的 Anaconda 环境?—— 一次完整的排错与恢复记录
开发语言·python·github
这里有鱼汤1 小时前
一招横盘突破选股法,赚钱不靠运气靠图形,靠概率!
后端·python
0wioiw01 小时前
Ubuntu基础(Python虚拟环境和Vue)
linux·python·ubuntu
xiao5kou4chang6kai41 小时前
Python-GEE遥感云大数据分析与可视化(如何建立基于云计算的森林监测预警系统)
python·数据分析·云计算·森林监测·森林管理
presenttttt2 小时前
用Python和OpenCV从零搭建一个完整的双目视觉系统(四)
开发语言·python·opencv·计算机视觉
木头左4 小时前
逻辑回归的Python实现与优化
python·算法·逻辑回归