装饰器 python

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

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

查看所有标签

猜你喜欢:

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

Inside Larry's and Sergey's Brain

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》 这本书的介绍吧!

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

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试