一个被忽略的python自定义装饰器模块-decorator!

一般的python装饰器函数的实现都是需要通过开发嵌套函数来完成,有时候装饰器函数的长相实在和原函数相差甚大。

也不利于查看原函数的实现逻辑,decorator模块提供了自己的装饰器接口只需要在自定义的函数上面加上该装饰器就能轻松实现自定义的装饰器接口。

1.常规的自定义装饰器

我们通过一个简单的函数嵌套来说明不使用任何的python非标准模块来实现一个装饰器。

开发一个名称为test的装饰器,并在该test函数中加入子函数执行,这样一个自定义的装饰器就完成了。

def test(func):
    def wrapper(*args, **kw):
        print("开始执行装饰器的函数内容!")
        func(*args, **kw)
        print("完成执行装饰器的函数内容!")

    return wrapper

开发一个函数func_,在该函数上面引入自定义好的@test装饰器就能完成自定义装饰器的引用。

@test
def func_():
    print("func_ is running!")

func_()

# 开始执行装饰器的函数内容!
# func_ is running!
# 完成执行装饰器的函数内容!
#
# Process finished with exit code 0

2.decorator装饰器

使用decorator装饰器就不用再通过嵌套函数的方式来开发自定义的装饰器了,避免自定义的装饰器源代码可读性比较低。

使用它来做自定义的装饰器首先我们需要安装一下decorator模块,使用pip的方式安装即可。

pip install decorator

decorator安装完成之后,将所需的模块导入到我们的代码块中即可。

from decorator import decorator

为了和上面的自定义装饰器的代码块相互对应,我们还是创建一个功能相同的装饰器。

@decorator
def test2(func, *args, **kw):
    print("开始执行装饰器的函数内容!")
    func(*args, **kw)
    print("完成执行装饰器的函数内容!")

自定义的装饰器使用方式还是和原来一样,直接将自定义装饰器test2添加到func_2函数上面。

@test2
def func_2():
    print("func_ is running!")

func_2()

# 开始执行装饰器的函数内容!
# func_ is running!
# 完成执行装饰器的函数内容!

这样得到的函数执行结果和原始的嵌套自定义方式是一样的,并且通过@decorator装饰器定义的装饰器更加具有可读性。

猜你喜欢

转载自blog.csdn.net/chengxuyuan_110/article/details/128355593