1. 首页 > 大杂烩

python学习之装饰器的理解和使用

装饰器是学习Python中非常重要的知识点,也是会让许多初学者容易迷惑的内容。下面从初学者的角度,加强装饰器的理解和使用。

装饰器使用的标识符号是@,常常会在代码中看到这个符号,但却是容易让初学者迷惑的一行代码。下面就举两个例子,帮助初学者理解什么是装饰器。

(1)简单装饰器

def decorator_simple(func):
    def outer():
        print('This is outer function.')
        func()
    return outer()

@decorator_simple
def inner():
    print('This is inner function.')

输出结果为:

python学习之装饰器的理解和使用

代码理解:这个例子是inner函数是没有任何参数的,装饰器部分的内容相当于inner=decorator_simple(inner),即将inner函数作为参数调用,即实现了内部函数,同时对内部函数装饰,增加了相应的功能,最后返回给inner函数,这样就实现了装饰函数decorator_simple对inner的装饰功能,当然decorator_simple也可以对其他函数进行装饰,提高了代码的复用程度,保持代码的简洁。上述代码相当于如下的代码。

def decorator_simple(func):
    def outer():
        print('This is outer function.')
        func()
    return outer()

def inner():
    print('This is inner function.')

inner = decorator_simple(inner)

(2)带参数的装饰器

def decorator_args(func):
    def outer(*args, **kwargs):
        print('This is the outer decorator')
        func(*args, **kwargs)
    return outer

@decorator_args
def inner(language, level):
    print('This is the inner function.')
    print("%s is %s" %(language, level))

inner('python', 'No.1')

输出结果:

python学习之装饰器的理解和使用

代码理解:这个例子跟上个例子不一样,inner(language,level)函数中是有两个参数,而在装饰器中的*args和**kwargs表示可以支持任意数量和类型的参数的输入,传导到decorator_args装饰函数中的子函数outer中。

最后,给初学者初学者建议的是,在阅读装饰器代码时可以转换成如下形式理解:

函数=装饰器(函数)

即通过装饰器,对函数添加功能,如对函数添加日志打印,对函数进行执行时间的统计和执行次数的控制等等。

如果加深了装饰器的理解后,还可以对类增加装饰器和实现自定义参数的装饰器等高级功能。

本文由站内用户发布,不代表喵趣网立场,如有侵权请联系本站删除!欢迎转载分享!

联系我们

在线咨询:点击这里给我发消息

微信号:13-845-161

工作日:9:30-18:30,节假日休息