Python基础-day12-装饰器

血红的双手。 提交于 2019-12-03 04:51:23

装饰器利用了闭包的原理

 

 

以下原则需要注意,只能在外围增减功能,但是内部是不能动的。

 

语法糖:

 

获取函数的返回值:

 

装饰带参数的函数

这里是装饰器函数

假如你想装饰一个带参数的函数,如下:

def func(para):

    print(para)

将我们的函数func交给装饰器函数处理,装饰器函数返回给我们的是具有传参能力的inner()。

我们利用这个inner(),传递参数a,实际上还是去调用func(a),也就是实现了对带有参数的函数进行装饰。

 

装饰一个可以接收任意参数的函数

跟前面传一个参数a是一样的原理。

 

 

问题:打印func的名字时,发现为inner。

这就违背了装饰器的初衷:不修改原函数的任何功能和属性。

 

使用wraps后,就能让func的名字是func。

其实就是对inner函数又做了一次装饰。这次使用了wraps这个装饰器函数。

 

所以,到目前为止,最完整的装饰器模板是:

from functools import wraps

def wrapper(func):

    @wraps(func)

    def inner(*args, **kwargs):

        print('......')

        ret = func(*args, **kwargs)

        print('......')

        return ret

    return inner

 

@wrapper

def function(para):

    print(para)

    return 1

 

result = function(5)

print(result)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!