# 装饰器的进阶
# functools.wraps
# 带参数的装饰器
# 多个装饰器装饰同一个函数
# 装饰器
# 开发原则 : 开放封闭原则
# 装饰器的作用 :在不改变原函数的调用方式的情况下,在函数的前后添加功能
# 装饰器的本质 : 闭包函数
# def wrapper(func):
# def inner(*args,**kwargs):
# print('在被装饰的函数执行之前做的事')
# ret = func(*args,**kwargs)
# print('在被装饰的函数执行之后做的事')
# return ret
# return inner
#
# @wrapper #holiday = wrapper(holiday)
# def holiday(day):
# print('全体放假%s天'%day)
# return '好开心'
#
# ret = holiday(3)
# print(ret)
# def outer(*args): #定义是聚合,调用是打散
# print(args)
# print(*args)
# def inner(*args):
# print('inner : ',args)
# inner(*args)
# outer(1,2,3,4)
# from functools import wraps
# def wrapper(func):
# @wraps(func)
# def inner(*args,**kwargs):
# print('之前')
# ret = func(*args,**kwargs)
# print('之后')
# return ret
# return inner
# @wrapper
# def holiday(day):
# '''
#
# :param day:
# :return:
# '''
# print('放假%s天'%day)
# return 'happly'
# holiday(1)
# # print(holiday.__name__) #holiday其实是指向inner
# # print(holiday.__doc__) #显示注释
# print(holiday.__name__) #引入了函数waper就可以以原名字调用原函数
# print(holiday.__doc__)
# 带参数的装饰器(就是多了一个可以控制装饰器的函数嵌套)
#就是控制装饰器是否工作
# import time
# from functools import wraps
# FLAG = False
# def timmer_out(flag):
# def timmer(func):
# @wraps(func)
# def inner(*args, **kwargs):
# if flag:
# start = time.time()
# ret = func(*args, **kwargs)
# end = time.time()
# print(end - start)
# return ret
# else:
# ret = func(*args, **kwargs)
# return ret
# return inner
# return timmer
#
# @timmer_out(FLAG)
# def wahaha():
# time.sleep(0.1)
# print(wahaha.__name__)
#
# @timmer_out(FLAG)
# def shuangyy():
# time.sleep(0.1)
# print(shuangyy.__name__)
#
# wahaha()
# shuangyy()
#多个装饰器装饰一个函数
# def wrapper1(func):
# def inner1():
# print('wrapper1 ,before func')
# ret = func()
# print('wrapper1 ,after func')
# return ret
# return inner1
#
# def wrapper2(func):
# def inner2():
# print('wrapper2 ,before func')
# ret = func()
# print('wrapper2 ,after func')
# return ret
# return inner2
#
# def wrapper3(func):
# def inner3():
# print('wrapper3 ,before func')
# ret = func()
# print('wrapper3 ,after func')
# return ret
# return inner3
#
# @wrapper3
# @wrapper2
# @wrapper1
# def f():
# print('in f')
# return '哈哈哈'
#
# print(f())