python 中 "@" 装饰器 的作用 与 理解

  1. 首先要知道“@”这个符号-装饰器,就是个语法糖,主要的作用就是“安全”。使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能

  2. 就是装饰器的作用,首先介绍下装饰器
    装饰器就是,假如已经有了一个函数func(a,b),作用是返回a-b,但是现在要让它返回a-b的绝对值,就要增加一个功能,如果不使用“@”这个符号的作用的话应该如下这么写:

    def decorate(func):
    	def inner(a, b):
       	 ret = func(a, b):
       	 return abs(ret)
      return inner
    
    def sub(a, b):
     return a-b
    
    >>>sub(3, 4)
    >>> -1
    >>>sub = decorate(sub)
    >>>sub(3, 4)
    >>> 1
    

    看上面那个例子所示,这样的话就要重新创建一个新的函数来包含sub这个函数的功能,如果这样的函数一(即需要增加功能的函数很多),那么会大大影响机器的功效,和代码的美观。

    但是如果使用“@”符号的话,那么代码如下:

    def decorate(func):
    	def inner(a, b):
        	ret = func(a, b):
        	return abs(ret)
    	return inner
    
    @decorate
    def sub(a, b):
    	return a-b
    
    >>>sub(3, 4)
    >>>1
    

    如上面的结果所示现在调用的是sub函数不是上个例子的调用decorate函数

  3. 而且装饰器能同时添加多个功能(比如说多个函数需要添加不同的模块,这个时候就需要将某个功能分到不同的函数中),就不用上面的例子了因为多个装饰器就涉及到了执行顺序的问题,具体如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    总代码如上,因为屏幕问题不能一下子都输出来,结果如下:
    在这里插入图片描述
    有没有发现这个顺序是非常有趣的,多个装饰器执行的顺序就是从最后一个装饰器开始,执行到第一个装饰器,再执行函数本身

    装饰器的外函数和内函数之间的语句是没有装饰到目标函数上的,而是在装载装饰器时的附加操作。
    23~25行是装载装饰器的过程,相当于执行了test=dect1(dect2(test)),此时先执行dect2(test),结果是输出aaaa、将func指向函数test、并返回函数two,然后执行dect1(two),结果是输出1111、将func指向函数two、并返回函数one,然后进行赋值。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值