内容简介:装饰器 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--装饰器详解
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
大数据时代的IT架构设计
IT架构设计研究组 / 电子工业出版社 / 2014-4 / 49.00元
《大数据时代的IT架构设计》以大数据时代为背景,邀请著名企业中的一线架构师,结合工作中的实际案例展开与架构相关的讨论。《大数据时代的IT架构设计》作者来自互联网、教育、传统行业等领域,分享的案例极其实用,代表了该领域较先进的架构。无论你就职于哪一行业都可以从本书中找到相关的架构经验,对您在今后的架构设计工作中都能起到很好的帮助作用。 《大数据时代的IT架构设计》适合具备一定架构基础和架构经验......一起来看看 《大数据时代的IT架构设计》 这本书的介绍吧!