Python21期 day3 之装饰器

一、什么是装饰器

装饰器本质上是一个Python函数,他可以让其他函数在不需要做任何代码变动的情况下,增加额外的功能,装饰器的返回值也是一个函数对象

装饰器的应用场景:插入日志,性能测试,事物处理,缓存等场景

二、装饰器形成过程

简单版装饰器

import time

def func1():
    print('in func1')

def timer(func):
    def inner():
        start = time.time()
        func()
        print(time.time() - start)
    return inner

func1 = timer(func1)
func1()

如果有多个函数,都想实现测试执行时间的功能,这种做法有点麻烦,因为函数名可能不相同,对此Python提供了语法糖功能

import time

def timer(func):
    def inner(a):
        start = time.time()
        func(a)
        print(time.time() - start)
    return inner

@timer
def func1(a):
    print(a)

func1(1)

被装饰函数带参数

import time

def wrapper(f1):
    def inner(*args,**kwargs):
        start_time = time.time()
        ret = f1(*args,**kwargs)
        end_time = time.time()
        print(end_time - start_time)
        return ret
    return inner

@wrapper
def func1(a,b):
    print(a,b)
    print('晚上回去吃烧烤')
    time.sleep(1)
    return 666

func1(111,222)

 

posted @ 2018-04-20 10:28  叫你你敢答应么  阅读(58)  评论(0)    收藏  举报