一、装饰器补充 1、偷梁换柱 即将原函数名指向的内存地址偷梁换柱成wrapper的内存地址所以应该将wrapper做的跟原函数一样才行参数层面上接受的参数和原函数一样 wrapper(*args,**kwargs) 返回值层面上返回的参数和原函数也一样 res = func(*args,**kwargs)#参数要写活 return res 2、上一节所写装饰器存在的问题 def outter(func): def wrapper(*args,**kwargs): #wrapper内需要func #1、调用原函数 #2、增加新功能 res = func(*args,**kwargs)#参数要写活 return res return wrapper @outter def index(x,y): """打印坐标""" print(x,y) print(index) #将打印wrapper函数的内存地址,而不是原函数的内存地址 print(index.__name__) #将打印的是wrapper,而不是原函数 print(help(index)) #将返回wrapper的文档注释:None,而不是原函数的文档注释