python基础学习-装饰器基本原理

#__author:"Feng Lin"
#date: 2018/8/29
#装饰器:在不修改函数的调用方式,但是还是想在原来的函数前后添加功能
#如下:timer 就是一个装饰器函数,支队一个函数有一些装饰作用
#使用闭包是实现装饰器的基本原理
import time
# def func():
#     time.sleep(0.01)
#     print("哈哈嘿嘿")
# def timer(func): #装饰函数
#     def inner():
#      start=time.time()
#      func()  #被装饰函数
#      end=time.time()
#      print(end-start)
#     return inner
# func=timer(func)
# func()

#装饰带参数的装饰器

# def timer(func): #装饰函数
#     def inner(x):
#      start=time.time()
#      func(x)  #被装饰函数
#      end=time.time()
#      print(end-start)
#     return inner
# @timer #语法糖 @timer与func=timer(func)等价
# def func(x):
#     time.sleep(0.01)
#     print("哈哈嘿嘿",x)
# func(1)

#装饰带参数和返回值一个值的装饰器

# def timer(func): #装饰函数
#     def inner(x):
#      start=time.time()
#      ret=func(x)  #被装饰函数
#      end=time.time()
#      print(end-start)
#      return ret
#     return inner
# @timer
# def func(x):
#     time.sleep(0.01)
#     print("哈哈嘿嘿")
#     return x
# print(func(1))

# #装饰带参数和返回多个值的装饰器
#
# def timer(func): #装饰函数
#     def inner(*args):
#      start=time.time()
#      ret=func(*args)  #被装饰函数
#      end=time.time()
#      print(end-start)
#      return ret
#     return inner
# @timer
# def func(x):
#     time.sleep(0.01)
#     print("哈哈嘿嘿")
#     return x
# print(func([1,2]))

#装饰带参数和返回任意类型的返回值的装饰器

# def timer(func): #装饰函数
#     def inner(*args,**kwargs):
#       start=time.time()
#       ret=func(*args,**kwargs)  #被装饰函数
#       end=time.time()
#       print(end-start)
#       return ret
#     return inner
# @timer
# def func(x,y):
#     time.sleep(0.01)
#     print("哈哈嘿嘿")
#     return x,y
# print(func([1,2],y=1))


#总结,万能装饰器定式

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

猜你喜欢

转载自www.cnblogs.com/lalalaxixixi/p/9556252.html