装饰器
定义:本质是函数,(装饰其他函数),即为其他函数添加附加功能。
原则: 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 ############### 基础平台提供的功能如下 ############### 6 7 def f1(): 8 print('in the f1') 9 10 def f2(): 11 print('in the f2') 12 13 def f3(): 14 print('in the f3') 15 16 def f4(): 17 print('in the f4') 18 19 ############### 业务部门A 调用基础平台提供的功能 ############### 20 21 f1() 22 f2() 23 f3() 24 f4() 25 26 ############### 业务部门B 调用基础平台提供的功能 ############### 27 28 f1() 29 f2() 30 f3() 31 f4()