装饰器的理解

参考大佬文章:http://python.jobbole.com/86632/

什么是装饰器?

装饰器本质上是一个python函数,他可以让其他函数在不需要发生任何改动的情况下为其添加额外的功能,

它的实现原理就是闭包,它接受一个函数作为参数,内部对其进行包装,再返回一个新的功能完善的函数

使用场景:增加权限校验,日志记录等

 

 

例子:

业务函数:

def   f1():

  print('f1')

def   f2():

  print('f2')

def   f3():

  print('f3')

 

装饰器:

def  super_f(fun):

  def inner():

    #新增功能

    return fun()

  return inner

把原来的业务函数塞进装饰器中的内嵌函数,再返回一个新的功能完善的函数

 

装饰器的使用:

@super_f

f1()

@super_f

f3()

@super_f

f3()

 

 

执行原理解释:

@super_f

f1()

装饰器语法糖的原理(f1为例):

1.将函数f1()作为参数传入装饰器中

2.在装饰器内部,将传进来的函数塞进内嵌函数(return f1(),将f1的执行过程塞进新函数),

3.将这个新的功能更加完善的内嵌函数返回出来(return super_f)

4.此时再执行f1()就相当于执行被塞进了f1()功能的inner()函数

 

 

 

*如果被装饰的函数有参数:就把形参写在装饰器的内嵌函数中 /如果参数个数不确定的话可以用*args **kwargs来代替

*一个函数可以被多个函数装饰:写法如下:

  @super_f1

  @super_f2

  f1()

 

转载于:https://www.cnblogs.com/abel01250303/p/9744673.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python装饰是一种特殊的Python函数,它可以在不修改被装饰函数源代码的情况下,为被装饰函数添加额外的功能。装饰本质上是一个闭包,它接收一个函数作为参数,并返回一个新的函数对象。这个新的函数对象包装了原始函数,并在其前后执行额外的代码。通过使用装饰,我们可以在不改变原函数结构的情况下,扩展函数的功能,比如添加日志记录、性能计时、权限验证等功能。 装饰的返回值也是一个函数对象,所以它可以像普通函数一样被调用。装饰可以用来装饰函数、方法或者类,使其拥有额外的功能。装饰的语法是在被装饰函数定义的上方加上@符号,后面紧跟装饰函数的名称。 装饰可以分为函数装饰和类装饰两种类型。函数装饰是最常见的一种形式,它是一个函数,接收一个函数作为参数,并返回一个新的函数对象。类装饰是指以类的形式实现的装饰,它必须实现`__call__`方法,并接收一个函数作为参数。 装饰可以带有参数,这时候需要编写一个返回装饰的高阶函数。高阶函数接收装饰参数,并返回一个装饰函数,装饰函数再接收被装饰的函数,并返回一个新的函数对象。通过这种方式,我们可以传递不同的参数给装饰,实现不同的功能。 在使用装饰时,为了保留原函数的元信息,如函数名、文档字符串等,可以使用`functools.wraps`修饰内部新函数,将新函数的属性设置为原始函数的属性,以便更好地还原被装饰函数的原始属性。 总结一下,Python装饰是一种为函数或类添加额外功能的机制,它可以在不修改原函数源代码的情况下,通过闭包的方式实现功能的扩展。装饰可以带有参数,并且可以用来装饰函数、方法或类。通过使用装饰,我们可以更加灵活地扩展和改变函数的行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值