知识点拾遗——装饰器

装饰器

def wrappwer(func):
    def inner(*args,**kwargs):
        print("molaoshi")
        ret = func(*args,**kwargs)
        #函数后的操作
        print("liner")
    return inner

@wrappwer
def func1(a,b):
    print(a)
    print("yangzil")
    print(b)

func1("alex","yan")
#如果有参数的话,就该这样搞,那么为什么要这样设计呢?说白了就是将函数封装进去在在器前后添加某些操作,
# 至于参数的话,反正已经大三无所谓,甚至可以利用这些参数进行某种函数前后的操作
#而最后调用函数的额时候其实是个返回值,func1("alex","yan")是用来接收函数的返回值的
from functools import wraps

def deco(func):
    @wraps(func) #加在最内层函数正上方
    def wrapper(*args,**kwargs):
        return func(*args,**kwargs)
    return wrapper

@deco
def index():
    '''哈哈哈哈'''
    print('from index')

print(index.__doc__)
print(index.__name__)

#使⽤装饰器时,有⼀些细节需要被注意。
#例如,被装饰后的函数其实已经是另外⼀个函数了(函数名等函数属性会发⽣改变)。添加后由于函数名和函数的doc发⽣了改变,对测试结果有一定影响!
#wraps是用来将inner函数的属性设置为index的属性值
posted @ 2021-06-16 20:10  小杨的冥想课  阅读(26)  评论(0编辑  收藏  举报