装饰器整理

2018年11月6日14:38:00 发表评论 355 views

1、纯函数篇

首先有两个概念需要明白,函数对象和内部函数。

函数对象

python中函数可以当做一个变量使用,因此也可以当做参数传递给其他的函数:

内部函数

2、原始装饰器

在这里我将使用原始的方式(函数套用)来实现装饰器的功能。

不带参数的原始装饰器

没错,这就是一个函数之间的嵌套调用,其中还在decorator中增加了内部函数wrapper,使人感觉多此一举,可以当你看到1处时,你可能就明白了。say_得到的只是一个闭包的环境。

带参数的原始装饰器

带参有返回值的原始装饰器

可以看到装饰器的作用主要是不修改被装饰的程序而添加新的功能。

3、函数装饰器

原始的装饰器有两点缺点,a、使用过程太过繁琐,b、内部闭包的时候改变了被装饰函数的一下属性等(比如:函数的名称),因此,python中提供一个@的语法糖和functools包。

不带参数的装饰器

带参数的装饰器

带返回值的装饰器

装饰器带有参数的装饰器

看着好像有点别扭,其实把它的执行步骤分开解析就明确了;a、调用repeat函数,返回decorator_repeat,但是这个返回值拥有一个num_times变量的闭包环境,b、运行decorator_repeat同时将函数名greet传给它,返回wrapper_repeat,c、运行wrapper_repeat,重复4次执行greet函数,并将最后一次的返回结果返回给最上层的调用者。

 

 

 

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: