Python基础-day12-装饰器
装饰器利用了闭包的原理。


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

语法糖:


获取函数的返回值:

装饰带参数的函数:
这里是装饰器函数

假如你想装饰一个带参数的函数,如下:
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)
from functools import wraps def wrapper(func): @wraps(func) def inner(*args, **kwargs): print('{} 登录了'.format(*args)) ret = func(*args, **kwargs) print('{} 下线了'.format(*args)) return ret return inner @wrapper def function(para): print(para) return 1 result1 = function('张三') result2 = function('李四') print(result1) print(result2)
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号