装饰器

装饰器

装饰器的特点:

  用户感觉不到装饰器的存在

  在一个函数前后唐家功能

  本身的函数不会改变

开放封闭原则

  开放 对于扩展是开放的

  封闭 对于修改是封闭的

装饰器的基本结构

def wrapper(func):
    def inner(*args,**kwargs):
        #被装饰函数执行之前的操作
        ret=fanc(*args,**kwargs)
        #被装饰函数执行之后的操作
        return ret
    return inner

@wrapper
def f(*argument):
    pass

例子

-------------------------------------------------------------------------------------------------------
# import time
# def timmer(F):                         #    装饰器
#     def inner():
#         start_time=time.time()
#         F()
#         end_time=time.time()
#         print(end_time-start_time)
#     return inner
#
# @timmer                             #   F=timmer(F)         #   语法糖
# def F():
#     sum=0
#     for i in range(1,100000):
#         sum+=i                         # 被装饰的函数
# F()                        # 直接调用函数,还可以加上装饰器的功能
# -------------------------------------------------------------------------------------------------------

例二

# def wrapper(func):
#     def inner(*args):
#         print('你正在调用%s函数'%(func.__name__))
#         re=func(*args)
#         return re
#     return inner
#
# @wrapper
# def welcome(name):
#     print('welcome: %s'%name)
# @wrapper
# def home():
#     print('欢迎来到home页!!')
#
# home()
# print('')
# welcome('alex')

  

带参数的装饰器  ( 批量 使用装饰器)
# def outter(flag):
#     def wrapper(func):
#         def inner(*args,**kwargs):
#             if flag:
#                 pass
#                 # 装饰功能
#             re=func(*args,**kwargs)
#             if flag:
#                 pass
#                 # 装饰功能
#
#             return re
#         return inner
#     return wrapper

# @outter(False)
# def fun1():
#     print('Apple')
#
# fun1()
 
原文地址:https://www.cnblogs.com/hzqblog/p/7498587.html