装饰器函数

装饰器概念

    装饰器的形成是为了给旧代码加上新的功能,而又不能改变原有代码和调用方式而形成.

    装饰器完全遵循开放封闭原则

装饰器的本质: 一个闭包函数.

装饰器的功能: 不修改源函数及其调用方式的情况下对原函数的功能进行扩展.

开放封闭原则:  对代码的扩展是开放的, 对代码修改是封闭的.

装饰器的代码实现

标准装饰框架

def wapper(func):
    def inner(*args,**kwargs):
        '''执行函数之前要做的'''
        ret = func(*args,**kwargs)
        '''执行函数之后要做的'''
        return ret
    return inner
标准版
from functools import wraps
def wrap(func):
    @wraps(func)
    def inner(*args,**kwargs):
        '''执行函数之前的操作'''
        ret = func(*args, **kwargs)
        '''执行函数之后的操作'''
        return ret
    return inner
wraps版本

基础版本装饰器

import time
def func():
    print('in func')
    time.sleep(2)
def func_time(f):
    def func_inner():
        start_time = time.time()
        f()
        end_time = time.time()
        print(f"函数的执行时间为:{end_time - start_time}")
    return func_inner

func = func_time(func)
func()

带参数的装饰器

def outer(flag):
    def timer(func):
        def inner(*args,**kwargs):
            if flag:
                print('''执行函数之前要做的''')
            re = func(*args,**kwargs)
            if flag:
                print('''执行函数之后要做的''')
            return re
        return inner
    return timer

@outer(False)
def func():
    print(111)

func()

  

 

      

 

posted @ 2020-07-24 00:36  闫世成  阅读(73)  评论(0编辑  收藏  举报