Python之装饰器入门

概述:python装饰器属于进阶必学的,很多人刚学是很难明白的,这里用比较容易懂的方式简单讲一下:(注意:这里需要函数的基础知识)

第一步:

我们有一个函数,比如一个求和的函数:

def sum_test():
    sum=12+20
    print(sum)

如果我们需要去再函数中前后加入开始跟结束打印用于调试,常规可能处理的办法是去修改这个函数,如下操作:

def sum_test():
    print("-----开始计算-----")
    sum=12+20
    print(sum)
    print("-----结束计算-----")

在前后输入print()来处理

第二步:

如果我有更多的函数需要调试呢,都去修改原来已经封装好的函数?一个一个去加入print的话也会很慢,有没有更好的办法?不错,可以再定义一个调试函数,然后去函数中去调用被调试函数,如下:

def sum_test():
    sum=12+20
    print(sum)


def pr_test(func):
    print("-----开始计算-----")
    func()
    print("-----结束计算-----")


if __name__ == '__main__':
    pr_test(sum_test)

上面的方法通过pr_test()调用函数sum(),能避免重复的去修改,但是我们每次要给pr_test()传参数,这也是一个不轻松的活啊,这个时候装饰器就闪亮登场了,先来了把pr_test()包装成一个装饰器:

def pr_test(func):
    def out_test():
        print("-----开始计算-----")
        func()
        print("-----结束计算-----")
    return out_test


def sum_test():
    sum=12+16
    print(sum)


if __name__ == '__main__':
   res=pr_test(sum_test)
   res()

 这样一个简易的装饰器就做好了,我们只需要在定义sum_test以后调用sum_test之前,加上res= pr_test(sum_test),就可以达到计时的目的;

   这也就是装饰器的概念,看起来像是sum_test被pr_test装饰了(有没有函数被装修的感觉,我是一个粉刷墙,粉刷本领强啊)!

   我们的Python提供了一个语法糖来降低字符输入量。就是@pr_test,用法如下:

def pr_test(func):
    def out_test():
        print("-----开始计算-----")
        func()
        print("-----结束计算-----")
    return out_test

@pr_test
def sum_test():
    sum=12+16
    print(sum)


if __name__ == '__main__':
   sum_test()

  通过@pr_test,我们就完成了一个装饰器的功能,以后任何有需要的函数,需要加调试代码(可以是任何公用功能),那么我们在前面加上这个@func(对应函数名)就可以了,大家有没有掌握到python装饰器的概念呢?

大幅度发是的发送到

猜你喜欢

转载自www.cnblogs.com/limmzz/p/11403308.html