函数篇--装饰器

Posted tina053

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数篇--装饰器相关的知识,希望对你有一定的参考价值。

1.装饰器的作用

在 不修改被装饰对象的源代码;不修改被装饰对象的调用方式; 为被封装的对象添加新的功能。

例如下列:

test函数为事先封装好的一个功能,但是在后期迭代的过程中,希望能为该功能增加一个计算运行时间的功能。这时候,装饰器就起到了作用了。

def test(s):
    print(‘%s is testing‘%s)
    time.sleep(3)
def timer(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        res = func(*args, **kwargs)
        end = time.time()
        print(start - end)
        return res
    return wrapper

test= timer(test)
###新的函数test中含有打印运行时间的功能,单完全没有改变之前函数的源代码,以及调用方式
test(‘dd‘)

  下面是装饰器的真正使用方法 : @wrapper

import time 

def timer(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        res = func(*args, **kwargs)
        end = time.time()
        print(start - end)
        return res
    return wrapper

@timer  ##引用装饰器
def test(s):
    print(‘%s is testing‘%s)
    time.sleep(3)

test(‘tina‘)

  无参装饰器

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        res = func(*args, **kwargs)
        end = time.time()
        print(start - end)
        return res
    return wrapper

@timer
def test(s):
    print(‘%s is testing‘%s)
    time.sleep(3)

test(‘tina‘)

  有参装饰器

def data_from(file):
    def data_form(func):
        def wrapper(*args, **kwargs):
            if file == ‘txt‘:
                print(‘data from txt‘)
                res = func(*args, **kwargs)
                return  res
            if file == ‘sql‘:
                print(‘data from sql‘)
            if file == ‘mongodb‘:
                print(‘data from mongodb‘)
        return wrapper
    return data_form

@data_from(‘sql‘)
def tell_name(name):
    print(‘my name is %s‘ %name)

tell_name(‘tt‘)

  

 

  

以上是关于函数篇--装饰器的主要内容,如果未能解决你的问题,请参考以下文章

Python函数篇:装饰器

Python入门篇之装饰器

测开之函数进阶篇・第七篇《装饰器》

函数篇--装饰器

函数进阶篇

Python进阶第九篇装饰器