无参补充
print(indea.__name__) #用函数内存地址查看函数名称 所以每个函数得有备注提供给人查看
print(indea.__doc__) # 查看函数的备注信息
from functools import wraps #导入函数给 装饰器函数修改边边角角 等同于wrapper.__doc__=func.__doc__ __name__等
# 补充装饰
import time
from functools import wraps #导入函数给 装饰器函数修改边边角角 等同于wrapper.__doc__=func.__doc__ __name__等
def timmer(func): #
@wraps(func) #导入函数装饰其他。。。。
def wrapper(*args, **kwargs): # 万能接受(也可以拿来接收溢出函数值)
wrapper.__doc__=func.__doc__ #备注装饰
start = time.time()
res = func(*args, **kwargs) # 1.拆散赋值 2.变量 func 是来自闭包函数内外界投递的函数 3.函数返回值用res接收
stop = time.time()
print(stop - start)
return res # 接受被装饰函数返回值
return wrapper # 记住用地址返回给装饰器闭包函数
@timmer #等同于 indea=timmer(indea)(糖果)
def indea(x,y,z):
"""我是函数备注1"""
time.sleep(2)
print("indea{}{}{}".format(x,y,z)) #记住format的使用 可以下标或等于外加这种
return 654546
res=indea(111,222,333) #记住参数的传值主要是看被装饰函数可以接收的范围传参数
print(res) #返回的res式被装饰函数的返回值
视频笔记
#偷梁换柱,即将原函数名指向的内存地址偷梁换柱成wrapper函数
# 所以应该将wrapper做的跟原函数一样才行
from functools import wraps def outter(func): @wraps(func) def wrapper(*args, **kwargs): """这个是主页功能""" res = func(*args, **kwargs) # res=index(1,2) return res # 手动将原函数的属性赋值给wrapper函数 # 1、函数wrapper.__name__ = 原函数.__name__ # 2、函数wrapper.__doc__ = 原函数.__doc__ # wrapper.__name__ = func.__name__ # wrapper.__doc__ = func.__doc__ return wrapper @outter # index=outter(index) def index(x,y): """这个是主页功能""" print(x,y) print(index.__name__) print(index.__doc__) #help(index) index(1,2) # wrapper(1,2)

浙公网安备 33010602011771号