装饰器 python

栏目: Python · 发布时间: 7年前

内容简介:装饰器 python

定义:在不修改一个函数内部代码的情况下,给函数添加扩展功能,即只能在函数之前或者之后添加功能,不能在函数内部添加,常见的应用场景如log日志、权限检验等。

1.不带参数的装饰器

  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____
  • 解释说明:
  1. 装饰器在代码写完后,此时不用调用函数,就会进行装饰
  2. 函数装饰时,会先执行离函数最近的装饰器
  3. 当调用函数时,函数会先执行离函数最远的装饰器再执行离的近的装饰器,再执行函数本身

以上所述就是小编给大家介绍的《装饰器 python》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

3D打印

3D打印

[美]胡迪•利普森,梅尔芭•库曼 / 赛迪研究院专家组 / 中信出版社 / 2013-4 / 49.00元

《3D打印:从想象到现实》内容简介:你需要一把功能强大的锤子?你需要一双精致无比的鞋子?你需要给孩子准备奇异的玩具?你需要一顿精美的晚餐?只管打印出来就行了。《3D打印:从想象到现实》带你走进3D打印的世界,认识一下当下这个最酷的东西——它将从想象变成现实,并带来一场深刻的社会革命。 书中讲述了3D打印技术的突破性发展,以及3D打印技术将如何应用在学校、厨房、医院等场所的。《3D打印:从想象......一起来看看 《3D打印》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具