内容简介:装饰器 python
定义:在不修改一个函数内部代码的情况下,给函数添加扩展功能,即只能在函数之前或者之后添加功能,不能在函数内部添加,常见的应用场景如log日志、权限检验等。
1.不带参数的装饰器
-
无参数无返回值得函数
# 定义一个装饰器 def set_func(func): def call_func(): print('————在函数之前添加功能——————') func() print('————在函数后面添加功能——————') return call_func # 定义一个函数,并添加装饰器 @set_func # 等价于 func1=set_func(func1) def func1(): print('____func1____') # 调用函数 func1()
-
代码执行结果
————在函数之前添加功能—————— ____func1____ ————在函数后面添加功能——————
2. 有参数有返回值得函数
# 定义装饰器 def set_func(func): def call_func(*args, **kwargs): print('——————添加功能————————') return func(*args, **kwargs) return call_func # 定义一个函数并进行装饰 @set_func def func1(m): print('____func1____') return m # 调用函数 f = func1(100) print(f)
- 代码执行结果
——————添加功能———————— ____func1____ 100
2.带有参数的装饰器
import time # 定义装饰器 def set_log(log): def set_func(func): # 定义log_dict 字典 log_dict = {1: 'error', 2: 'warning'} def call_func(*args, **kwargs): # 打开log.txt文件(没有就创建文件),追加内容 with open('log.txt', 'a', encoding='utf-8') as f: f.write('%s ---%s---调用了函数%s\n' % (log_dict[log], str(time.ctime()), func.__name__)) return func(*args, **kwargs) return call_func return set_func # 定义一个函数并进行装饰 @set_log(1) def func1(m): print('____func1____') return m # 调用函数 f = func1(100) print(f)
- 代码执行结果
____func1____ 100 # log.txt 文件内容 error ---Fri Jan 5 22:01:24 2018---调用了函数func1
3.一个函数有两个装饰器
# 定义装饰器1 def set_log(func): print('————开始装饰sel_log————') def call_func(): print('___set_log___') func() return call_func # 定义装饰器2 def set_func(func): print('————开始装饰set_func————') def call_func(): print('___set_func___') func() return call_func # 定义函数,并添加装饰器 @set_log @set_func # 等价于 func1=set_func(func1) def func1(): print('____func1____')
-
先不调用函数运行代码,会看到如下结果
————开始装饰set_func———— ————开始装饰sel_log————
-
调用函数,再看执行结果
# 调用函数 func1()
# 执行结果 ————开始装饰set_func———— ————开始装饰sel_log———— ___set_log___ ___set_func___ ____func1____
- 解释说明:
- 装饰器在代码写完后,此时不用调用函数,就会进行装饰
- 函数装饰时,会先执行离函数最近的装饰器
- 当调用函数时,函数会先执行离函数最远的装饰器再执行离的近的装饰器,再执行函数本身
以上所述就是小编给大家介绍的《装饰器 python》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 装饰器与元数据反射(1)方法装饰器
- 草根学Python(十六) 装饰器(逐步演化成装饰器)
- 一文读懂 JS 装饰器,这是一个会打扮的装饰器
- 装饰器与元数据反射(2)属与类性装饰器
- Python装饰器
- python--装饰器详解
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Inside Larry's and Sergey's Brain
Richard Brandt / Portfolio / 17 Sep 2009 / USD 24.95
You’ve used their products. You’ve heard about their skyrocketing wealth and “don’t be evil” business motto. But how much do you really know about Google’s founders, Larry Page and Sergey Brin? Inside......一起来看看 《Inside Larry's and Sergey's Brain》 这本书的介绍吧!