码迷,mamicode.com
首页 > 其他好文 > 详细

函数篇--装饰器

时间:2019-01-28 19:13:15      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:bsp   对象   testing   return   func   lse   import   代码   迭代   

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‘)

  

 

  

函数篇--装饰器

标签:bsp   对象   testing   return   func   lse   import   代码   迭代   

原文地址:https://www.cnblogs.com/tina053/p/10331260.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!