python 函数装饰器

申明:资料来源于网络及书本,通过理解、实践、整理成学习笔记。
def funA(desA): 
    desA()
    print("我是函数:funA() ,我装饰我上面的函数:" + desA.__name__) 
   
    
@funA
def fun(): 
    print("我是函数:fun()")


运行结果:
我是函数:fun()
我是函数:funA() ,我装饰我上面的函数:fun
@的作用

“定义”并“执行”funA()函数并将fun()函数作为参数传递给funA(),即: funA(fun())

装饰器的意义与作用
  1. 装饰器的作用就是为已经存在的对象添加额外的功能,
  2. 以原生的方式运行对象。在这是就是运行fun()但实际上运行的是 funA(fun())

为什么:自己开发的应用在线上稳定运行了一年,后面随着业务的发展发现原有的通过某些函数定义的部分功能需要扩展一下新功能,恰好现有的功能又作为公共接口在很多地方被调用。把新功能封装成可接收函数作为参数、同时调用原函数的高阶函数,然后通过嵌套函数来调用返回高阶函数这就需要用到今天的主角装饰器了。

原生的运行一下fun()

注意:如果原生的运行语句在,上面那个“@”就只有“定义”而没有“执行”功能了

def funA(desA): 
    desA()
    print("我是函数:funA() ,我装饰我上面的函数:" + desA.__name__) 
   
    
@funA
def fun(): 
    print("我是函数:fun()")
   

fun()


运行结果:
我是函数:fun()
我是函数:funA() ,我装饰我上面的函数:fun
Traceback (most recent call last):
.
.
.
TypeError: 'NoneType' object is not callable
改改再来
def funA(desA): 
    desA()
    print("我是函数:funA() ,我装饰我上面的函数:" + desA.__name__) 
    return funA
    
@funA
def fun(): 
    print("我是函数:fun()")
    return fun

fun()


运行结果:
我是函数:fun()
Traceback (most recent call last):
.
.
.
NameError: name 'fun' is not 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值