无参补充

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)

 

posted @ 2021-03-16 18:33  欧阳锦涛  阅读(36)  评论(0)    收藏  举报
TOP 底部