一、函数的有用信息
# from functools import wraps
# def wrapper(f): # f = func1
# @wraps(f)
# def inner(*args,**kwargs): #聚合
# #args (1,2,3)
# '''执行函数之前的相关操作'''
# ret = f(*args,**kwargs) # 打散 1,2,3
# '''执行函数之后的相关操作'''
# return ret
# return inner
# #
# # # 函数的执行时,*打散。
# # # 函数的定义时,*聚合。
# # @wrapper # func1 = wrapper(func1) func1 = inner
# # def func1(*args): #args (1,2,3)
# # print(666)
# # return args
# # print(func1(*[1,2,3])) # inner(3,5) 打散
#
#
# # def func1():
# # """
# # 此函数是完成登陆的功能,参数分别是...作用。
# # :return: 返回值是登陆成功与否(True,False)
# # """
# # print(666)
# # # print(func1.__name__)
# # # print(func1.__doc__)
# # return True
# # func1()
# # print(func1.__name__)
# # print(func1.__doc__)
# @wrapper
# def func1():
# """
# 此函数是完成登陆的功能,参数分别是...作用。
# :return: 返回值是登陆成功与否(True,False)
# """
# print(666)
# return True
# func1()
# print(func1.__name__)
# print(func1.__doc__)
二、带参数的装饰器
import time
def timmer(*args,**kwargs):
def wrapper(f):
def inner(*args,**kwargs):
if flag:
start_time = time.time()
ret = f(*args,**kwargs)
time.sleep(0.3)
end_time = time.time()
print('此函数的执行效率%f' % (end_time-start_time))
else:
ret = f(*args, **kwargs)
return ret
return inner
return wrapper
flag = True
@timmer(flag,2,3) # 两步:1,timmer(flag) --> wrapper 2,@wrapper 装饰器
def func1():
print(666)
@timmer(flag)
def func2():
print(777)
# func1()
# func2()
# import time
# flag = True
# def wrapper(f):
# def inner(*args,**kwargs):
# if flag:
# start_time = time.time()
# ret = f(*args,**kwargs)
# time.sleep(0.3)
# end_time = time.time()
# print('此函数的执行效率%f' % (end_time-start_time))
# else:
# ret = f(*args, **kwargs)
# return ret
# return inner
三、多个装饰器装饰一个函数
def wrapper1(func): # func == f函数名
def inner1():
print('wrapper1 ,before func') # 2
func()
print('wrapper1 ,after func') # 4
return inner1
def wrapper2(func): # func == inner1
def inner2():
print('wrapper2 ,before func') # 1
func()
print('wrapper2 ,after func') # 5
return inner2
# @wrapper3
# @wrapper2 # f = wrapper2(f) 里面的f==inner1 外面的f == inner2
# @wrapper1 # f = wrapper1(f) 里面的f==函数名f 外面的f == inner1
# def f(): # 3
# print('in f')
#
# f() # inner2()
# @wrapper2
# @wrapper3 # f = wrapper2(f) 里面的f==inner1 外面的f == inner2
# @wrapper1 # f = wrapper1(f) 里面的f==函数名f 外面的f == inner1
# def f(): # 3
# print('in f')
#
# f() #