装饰器

Posted 韩晓飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器相关的知识,希望对你有一定的参考价值。

1.什么是装饰器

    本质就是函数  

装饰即修饰,意指为其他函数添加新功能

 

装饰器定义:本质就是函数,功能是为其他函数添加新功能

 

2.遵循的原则

   1.不修改被装饰函数的源代码(开放封闭原则)

 

    2.为被装饰函数添加新功能后,不修改被修饰函数的调用方式

3.装饰器=高阶函数+函数嵌套+闭包

     3.1高阶函数定义:
  1.函数接收的参数是一个函数名

 

   2.函数的返回值是一个函数名

 

  3.满足上述条件任意一个,都可称之为高阶函数

   3.2 高级函数

def foo():
print(‘sb‘)
def gao_jie(func):
print(‘高阶函数接收名字%s‘%func)
func()
def gao_jie2(func):
print(‘高阶函数2,返回值是%s‘%func)
return func
gao_jie(foo)
gao_jie2(foo)
高阶函数总结
1.函数接收的参数是一个函数名
  作用:在不修改函数源代码的前提下,为函数添加新功能,
  不足:会改变函数的调用方式
2.函数的返回值是一个函数名
  作用:不修改函数的调用方式
  不足:不能添加新功能

3.2函数嵌套

 

def father(name):
print(‘laji‘)
def son():
print(‘erbi‘)
def grandson():
print(‘sb‘)
grandson()
son()
father(‘boss‘)

 

3.3闭包

 

 闭包:在一个作用域里放入定义变量相当于打了一个包
def father(name):
def son():
name=‘egon‘
print(‘father is [%s]‘%name)
def grandson():
name=‘wupeiqi‘
print(‘sb is [%s]‘%name)
grandson()
son()
father(‘boss‘)
4.无参装饰器
无参装饰器=高级函数+函数嵌套
import time
def timer(func):
def wrapper(*args,**kwargs):
start_time=time.time()
res=func(*args,**kwargs)
stop_time=time.time()
print(‘hanshu:%s,yunxingshijian:%s‘%(func,stop_time-start_time))
return res
return wrapper
@timer
def cal(array):
res=0
for i in array:
res+=i
return res
# cal=timer(cal)
cal(range(10))

 

以上是关于装饰器的主要内容,如果未能解决你的问题,请参考以下文章

Python面向对象学习之八,装饰器

thymeleaf 片段渲染后重新加载 javascript

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码