当前位置: 首页 > news >正文

Python:被装饰的函数,多个装饰器的装饰过程

被装饰的函数有参数:

def outer(fn):
    def inner(name):
        print(f"login{name}")#执行被装饰的函数
        fn(name)
    return inner
@outer
def send(name):
    print("参数")
send('lihailu')#语法糖形式
def outer(fn):
    def inner(name):
        print(f"login{name}")#执行被装饰的函数
        fn(name)
    return inner
#@outer
def send(name):
    print("参数")
#send('lihailu')
ot=outer(send)#ot=inner
ot('lihailu')#标准装饰器形式

被装饰的函数有可变函数*args,**kwargs:

def func(*args,**kwargs):
    print(args)
    print(kwargs)
func(name='lihailu')#普通函数
def func(*args,**kwargs):
    print(args)
    print(kwargs)
#func(name='lihailu')
#装饰器函数
def outer(fn):
    def inner(*args,**kwargs):
        print("login...")
        fn(*args,**kwargs)
    return inner
ot=outer(func)
ot(xixi,name="lihailu")#前者以元组的形式传递给args,后者以键等于值的形式传递给kwargs

多个装饰器:
 

def outer(fn):
    def inner():
        return "123"+fn()+"456"
    return inner
def outer1(fn):
    def inner():
        return "789" + fn() + "000"
    return inner
#被装饰的函数一
@outer
@outer1#多个装饰器的装饰过程离函数最近的装饰器先装饰,然后外面的显示器再进行装饰,由内到外的装饰过程
def test1():
    return "python"
print(test1())

结果为:123789python000456#加红色的表示先装饰,就像一层糖包着一层糖

可以理解为:在装饰器函数里,fn是传入的函数对象,当调用fn()时,就相当于调用传入的函数。在多个装饰器的情形下,装饰器会按照从内到外的顺序依次应用,每个装饰器返回的新函数会调用上一个装饰器处理后的函数,最终调用到最初的被装饰函数。

http://www.dtcms.com/a/65042.html

相关文章:

  • html css 笔记
  • 什么是设计模式
  • Matlab 双线性插值(二维)
  • TypeScript基础
  • Uniapp使用地图的时候滑动上层的view地图也滑动
  • 【DevOps】Backstage介绍及如何在Azure Kubernetes Service上进行部署
  • 附下载 | 2024 OWASP Top 10 基础设施安全风险.pdf
  • Shader中着色器的编译目标级别
  • vue3数据双向绑定解析
  • Unity3D 着色器优化(Shader Optimization)
  • 机器人基础知识
  • 如何设置GET请求的参数?
  • SAP SD学习笔记31 - 销售BOM
  • Java基础入门流程控制全解析:分支、循环与随机数实战
  • 部署MuseTalk时, MMCV问题解决方案
  • 【MyBatis Plus 逻辑删除详解】
  • DICOM开发者常用DICOM开源库详解
  • 推理大模型时代,TextIn ParseX助力出版业知识资产重构
  • 全球领先的光学方案设计公司:倚光科技
  • Android Spinner总结
  • 23、vue3+vite配置环境变量实现开发、测试、生产的区分
  • LLM最新的模型微调技术有哪些
  • c语言闯算法--常用技巧
  • LINUX 指令大全
  • 养生,点亮健康生活
  • 监听新打开窗口的关闭情况和iframe内系统的url改变情况
  • 如何用“几何产品规范”让齿轮测量更精准?
  • 如何选择适合您智能家居解决方案的通信协议?
  • Spring Boot 项目部署启动异常问题分析与解决​:主类缺失与依赖冲突的分析
  • Java 集合框架:数据管理的强大工具