装饰器

import time
def timmer(func):
    #函数名可以当做函数的参数
    def inner():
        start = time.time()
        func()
        end = time.time()
        print(end - start)
    return inner

def hahaha():
    time.sleep(0.1)
    print('aaaa')

#hahaha()
# timmer(hahaha)
#我们不能修改这个函数的调用方式
#也不能修改原代码
# hahaha = timmer(hahaha)  #timmer函数的地址给了hahaha
# hahaha()  #实际上执行的是timmer

import time
def timmer(func):
    #函数名可以当做函数的参数
    def inner():
        start = time.time()
        func()
        end = time.time()
        print(end - start)
    return inner

def hahaha():
    time.sleep(0.1)
    print('aaaa')

# hahaha = timmer(hahaha)  #timmer函数的地址给了hahaha
# hahaha()

# def timmer(func):  #---> hahaha
#     def inner(x,y):
#         func(x,y)  # --->hahaha
#     return inner
#
# def hahaha(a,b):
#     time.sleep(0.1)
#     print(a,b)
#
# hahaha = timmer(hahaha)
# #我们不能修改这个函数的调用方式
# hahaha(1,2)  #==>inner(1,2)

def timmer(func):  #---> hahaha
    def inner(x,y):
        func(x,y)  # --->hahaha
    return inner

def hahaha(a,b):
    time.sleep(0.1)
    print(a,b)

def kkk(a):
    print(a)

# hahaha = timmer(hahaha)
# hahaha(1,2) #inner(1,2)

def timmer(func):  #---> hahaha
    def inner(*args,**kwargs):
        #args == (1,2)  kwargs == {}
        #*args == 1,2   **kwargs == a =1,b = 2
        func(*args,**kwargs)  # --->hahaha
    return inner


def kkk(a):
    print(a)

kkk = timmer(kkk)
# kkk(1)


def timmer(func):  #---> jjj
    def inner(*args,**kwargs):
        ret = func(*args,**kwargs)  # --->ret = jjj()
        return ret
    return inner

@timmer  #jjj = timmer(jjj)  语法糖
def jjj():
    return 123

# jjj = timmer(jjj)
ret = jjj()  #==>inner

#装饰器的本质 :闭包函数
#功能:就是在不改变原函数调用方式的情况下,在这个函数前后加上扩展功能
def timmer(func):
    def inner(*args,**kwargs):
        '''添加函数调用之前的扩展代码'''
        ret = func(*args,**kwargs)
        '''添加函数调用之后的扩展代码'''
        return ret
    return inner
#设计模式 原则 开放封闭原则
#对扩展是开放的
#对修改是封闭的


def wrapper(func):#装饰
    def inner(*args,**kwargs):

        ret = func(*args,**kwargs)

        return ret
    return inner

@wrapper
def aaa():
    print('asghksdlhf')

@wrapper
def bbb():
    print('asghksdlhf')

# aaa()
# bbb()
# aaa()
# bbb()
import time
def wrapper(func):  # 装饰
    def inner(*args, **kwargs):
        start = time.time()
        ret = func(*args, **kwargs)
        end = time.time()
        print(end - start)
        return ret
    return inner

@wrapper
def lll():
    time.sleep(0.1)
    print('hello')

lll()
原文地址:https://www.cnblogs.com/ctztake/p/7244971.html