码迷,mamicode.com
首页 > 编程语言 > 详细

python之装饰器

时间:2019-04-17 09:25:03      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:还需要   破坏   重复   原则   本质   font   实现   要求   而且   

 
今日内容总结:
装饰器(闭包函数的一种应用)
无参装饰器
有参装饰器
 
 
装饰器(闭包函数的一种应用)
 
1. 什么是装饰器
器:指的是具备某一功能的工具
装饰:指的是为被装饰器对象添加新功能
 
装饰器就是用来为被装饰器对象添加新功能的工具
 
需要注意的是:装饰器本身可以是任意可调用对象,被装饰器的对象也可以是任意可调用对象
 
 
2. 为何要用装饰器
因为在实际开发环境中,是不允许对原代码进行操作,而且不能破坏原有的调用关系,根据实际要求还需要增添新功能
开发需要遵循的一个原则
开放封闭原则:封闭指的是对修改封闭,对扩展开放,就是保持原有功能并新增新的功能
 
装饰器的实现必须遵循两大原则:
1. 不修改被装饰对象的源代码,被操作的函数的源代码是不能进行修改
2. 不修改被装饰器对象的调用方式
 
装饰器的目标:就是在遵循1和2原则的前提下为被装饰对象添加上新功能
 
3. 怎么用装饰器
 
无参装饰器
装饰器不需要参数传入
有参装饰器
装饰器需要参数传入
 
# 装饰器模板
def outter(func):
  def wrapper(*args,**kwargs):
    #在调用函数前加功能
    res=func(*args,**kwargs) #调用被装饰的\也就是最原始的那个函数
    #在调用函数后加功能
    return res
  return wrapper
 
注意:
1.需要注意的是装饰器最多有三层
2.解释装饰器时@语法的时候是”自下而上运行“
3.执行装饰器时装饰器内的那个wrapper函数时的是”自上而下“
 
语法糖
什么是语法糖?
使用了”@”语法糖后,就不需要额外代码来给”被装饰函数”重新赋值了,
其实”@装饰器函数”的本质就是”被装饰函数 = 装饰器函数(被装饰函数#原始的被装饰函数的内存地址)”。
为什么用语法糖?
使用语法糖让代码简化,不需要重复在调用装饰器时,进行重复的赋值操作。

python之装饰器

标签:还需要   破坏   重复   原则   本质   font   实现   要求   而且   

原文地址:https://www.cnblogs.com/haiguixiansheng/p/10721304.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!