装饰器 python

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

内容简介:装饰器 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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

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

The Art of Computer Programming, Volumes 1-3 Boxed Set

The Art of Computer Programming, Volumes 1-3 Boxed Set

Donald E. Knuth / Addison-Wesley Professional / 1998-10-15 / USD 199.99

This multivolume work is widely recognized as the definitive description of classical computer science. The first three volumes have for decades been an invaluable resource in programming theory and p......一起来看看 《The Art of Computer Programming, Volumes 1-3 Boxed Set》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具