目录
事发现场
这到底啥玩意啊哥,O.o?
简介
由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数.
1 | def now(): |
函数对象有一个__name__属性:
1 | now.__name__ |
假设我们要增强now()
函数的功能,比如,在函数调用前后自动打印日志,但又不希望修改now()
函数的定义,这种在代码运行期间动态增加功能的方式,称之为 “装饰器”(Decorator) 。
实例解析
本质上,decorator就是一个返回函数的高阶函数。log是一个能打印日志的函数
1 | def log(func): |
上面的log函数接受一个函数作为参数,然会一个函数
执行代码:
1 |
|
输出结果如下,我们可以看到在执行now
函数的同时页执行了log
函数
1 | now() |