python 函数装饰器

摘要:装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。

一切皆对象:首先先举个列子,

 

import time
def add(a,b):
    start_time =time.time()
    res =a+b
    exec_time=time.time()-start_time
    print("add函数,花费的时间:{}".format(exec_time))
    return res

如果,这个时候如果在计算减法函数(sub)的时间的话,又得重新写一段代码,在不使用装饰器的情况下。

 

import time
def add(a,b):
    start_time =time.time()
    res =a+b
    exec_time=time.time()-start_time
    print("sub函数,花费的时间:{}".format(exec_time))
    return res

 

不用装饰器饰器的话,会显得很麻烦,而且也不灵活。

所以我们要使用装饰器,下面我们看一下用装饰器的代码。

 

import time
#定义装饰器
def time_calc(func):
    def wrapper(*args,**kargs):
        start_time = time.time()
        f=func(*args,**kargs)
        exec_time = time.time()-start_time
        return f
    return wrapper
#使用装饰器
@time_calc
def add(a,b):
    return a+b
@time_calc
def sub(a,b):
    return a-b

 

这样看起来比较好多了。

现在我们说一下装饰器的作用:就是为已经存在的函数或对象添加额外的功能。

装饰器应用场景及理解:
装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能
它经常用于有切面需求的
场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。

装饰器的定义:

    装饰器本质上就是一个python函数,它可以让其它函数在不需要做任何代码改动的前提下增加额外的功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景中,比如-- >插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同的代码并且可以重复使用。

 (有参装饰器):带参数的装饰器和类装饰器属于进阶的内容。在理解这些装饰器之前,最好对函数的闭包和装饰器的接口约定能够有一定的了解。

    可以这么理解,当带参数的装饰器被打在某个函数上时,比如@outter(‘critical‘)时,它其实就是一个函数,会被马上执行,

import time
#定义装饰器
def time_calc(func):
def wrapper(*args,**kargs):
start_time = time.time()
f=func(*args,**kargs)
exec_time = time.time()-start_time
return f
return wrapper
#使用装饰器
@time_calc
def add(a,b):
return a+b
@time_calc
def sub(a,b):
return a-b
欧克 python的装饰器先写到这,本人还是萌新,还要多多学习。
posted @ 2021-03-29 20:42  迷路三剑客  阅读(165)  评论(0)    收藏  举报