1. 装饰器的概念
装饰器(decorator):
装饰器是一种闭包的使用,要理解装饰器的原理必须先理解python闭包的概念。
关于闭包的知识可以参考>>传送门 - Python闭包<<。
2. 举例理解
1 | # -*- coding: utf-8 -*- |
1 | 运行结果: |
@deco只是一种语法糖写法
之所以打印结果中没有输出:”func_sum”,是因为在执行参数检查语句时return 0了。
3. 知识点
3.1 装饰器在何时生效?
在main函数之前,import时就生效了。因为@deco就相当于func_sum = deco(func_sum),是写在最外面的。
如果把上述例子中最后的两个print语句注释掉的话,执行结果将会是:
1 | deco |
3.2 装饰器能不能返回别的函数?
当然可以,这样就可以修改函数的功能了。
即被装饰的函数的功能取决于inner_deco返回的是哪个函数。