当前位置: 首页 > 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()时,就相当于调用传入的函数。在多个装饰器的情形下,装饰器会按照从内到外的顺序依次应用,每个装饰器返回的新函数会调用上一个装饰器处理后的函数,最终调用到最初的被装饰函数。

相关文章:

  • 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总结
  • 援藏博士张兴堂已任西藏农牧学院党委书记、副校长
  • 一企业采购国产化肥冒充“挪威化肥”:7人被抓获
  • 万玲、胡春平调任江西省鹰潭市副市长
  • 北上广深均宣布下调个人住房公积金贷款利率
  • 中美“第二阶段”贸易协定是否会在会谈中提出?商务部回应
  • 趣看 | 五一黄金周:你拍风景,拍风景的人在拍你