您的位置:首页 > 编程语言 > Python开发

Python 装饰器的形成过程

2017-04-03 18:53 155 查看

装饰器
  定义:本质是函数,(装饰其他函数),即为其他函数添加附加功能。
  原则: 1、不能修改被装饰的函数的源代码;
            2、不能修改被装饰的函数的调用方式。

实现装饰器知识储备:
   1. 函数即'变量'        
   2. 高阶函数
       a. 把一个函数名当作实参传递给另一个函数(在不修改被装饰函数源代码的前提下为其添加新功能)
       b. 返回值中包含函数名(不修改函数的调用方式)
   3. 嵌套函数

高阶函数 + 嵌套函数 (组成)--> 装饰器

  1、必备                                                

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: antcolonies

'''第一波'''

def foo():
print('in the foo')

foo               # 函数名,相当于变量
print(foo)        # <function foo at 0x0000000001CFCBF8>  变量的索引地址
foo()             # in the foo    执行/调用函数foo

'''第二波'''

def foo(x):
print('in the foo_%d' %x)

foo = lambda x:x+1

print(foo)

print(foo(1))     # 执行下面的lambda表达式,而不再是原来的foo函数,因为函数 foo 被重新定义了

'''
<function foo at 0x0000000001CFCBF8>
in the foo
<function <lambda> at 0x0000000001CFCBF8>
2
'''

 

  2、需求来了                                       

初创公司有N个业务部门,1个基础平台部门,基础平台负责提供底层的功能,如:数据库操作、redis调用、监控API等功能。业务部门使用基础功能时,只需调用基础平台提供的功能即可。如下:

1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 # Author: antcolonies
4
5 import functools
6
7 def outer(func):
8     @functools.wraps(func)
9     def inner(*args, **kwargs):
10         print(inner.__doc__)
11         return func()
12     return inner
13
14 @outer
15 def function():
16     """
17     decorator
18     asdfasd
19     :return:
20     """
21     print('func')
22
23 function()
24
25 '''
26
27     decorator
28     asdfasd
29     :return:
30
31 func
32 '''
含元信息

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: