day11 装饰器一

一、装饰器的形成

import time
# print(time.time()) # 获取当前时间
# time.sleep(10) #让程序在执行到这个位置的时候停一会儿
# 法一
def func():
    time.sleep(0.01)
    print('mr.king')

def timmer(f):   #timmer是装饰器函数
    def inner():
        start = time.time()
        f()  #f为被装饰的函数
        end = time.time()
        print(end - start)
    return inner

func = timmer(func)
func()
# 法二
def func():
    time.sleep(0.01)
    print('mr.king')

def timmer(f):
        start = time.time()
        f()
        end = time.time()
        print(end - start)

timmer(func)

语法糖

def timmer(f):    #装饰器函数
    def inner():
        start = time.time()
        ret = f()       #被装饰的函数
        end = time.time()
        print(end - start)
        return ret
    return inner

@timmer         #语法糖 @装饰器函数名
def func():     #被装饰的函数
    time.sleep(0.01)
    print('老板好同事好大家好')
    return '新年好'
# func = timmer(func)
ret = func()   #inner()
print(ret)

 

二、装饰器的作用

# 装饰器的作用 —— 不想修改函数的调用方式 但是还想在原来的函数前后添加功能
# timmer就是一个装饰器函数,只是对一个函数 有一些装饰作用
#装饰带参数函数的装饰器
from functools import wraps def timmer(f): #装饰器函数
  @wraps(func) #完美的装饰器 def inner(*args,**kwargs): #(1,2) /(1) start = time.time() ret = f(*args,**kwargs) #f(1,2) #被装饰的函数 end = time.time() print(end - start) return ret return inner @timmer #语法糖 @装饰器函数名 def func(a,b): #被装饰的函数 time.sleep(0.01) print('老板好同事好大家好',a,b) return '新年好' @timmer #语法糖 @装饰器函数名 def func1(a): #被装饰的函数 time.sleep(0.01) print('老板好同事好大家好',a) return '新年好' # func = timmer(func) ret = func(1,2) #inner() ret = func(1,b = 2) #inner() print(ret)

 

三、原则:开放封闭原则

#   开放 : 对扩展是开放的
# 封闭 : 对修改是封闭的

四、装饰器的固定模式

def wrapper(f):    #装饰器函数,f是被装饰的函数
    def inner(*args,**kwargs):
        '''在被装饰函数之前要做的事'''
        ret = f(*args,**kwargs)    #被装饰的函数
        '''在被装饰函数之后要做的事'''
        return ret
    return inner

@wrapper         #语法糖 @装饰器函数名
def func(a,b):     #被装饰的函数
    time.sleep(0.01)
    print('老板好同事好大家好',a,b)
    return '新年好'
def wrapper(func):   #qqxing
    def inner(*args,**kwargs):
        ret = func(*args,**kwargs)   #被装饰的函数
        return ret
    return inner

@wrapper        #qqxing = wrapper(qqxing)
def qqxing():
    print(123)

ret = qqxing()   #inner

 

 

posted @ 2019-03-09 21:16  pumpkin_J  阅读(78)  评论(0)    收藏  举报