装饰器函数

def log(text):
def deroctor(func):
def wrapper(*args, **kw):
print('ppp')
print(text)
return func(*args, **kw)
return wrapper()
return deroctor



@log('sssssss')
def now(a,b,c,d):
print(a+b+c+d)

now(3,4,5,6)

这种在代码运行期间动态增加函数功能的方式,称之为“装饰器”(Decorator)。

decorator,传入一个函数(这个函数就是他要装饰的函数。默认函数名是func)作为参数,并返回一个函数对象

@log放到now()函数的定义处,相当于执行了语句:now = log(text)   把装饰器赋给了一个跟要装饰的函数名称同名的变量

由于log()是一个decorator,返回一个函数对象,同名now变量指向了新的函数对象(deroctor),于是调用now()将执行新函数,即在log()函数中返回的deroctor对象。

wrapper()函数的参数定义是(*args, **kw),是提供给func函数定义参数。

它们是可变参数

如果我们不确定要往函数func中传入多少个参数,或者我们想往函数中以列表和元组的形式传参数时,那就使要用*args;
如果我们不知道要往函数func中传入多少个关键词参数,或者想传入字典作为关键词参数时,那就要使用**kwargs。

 

posted @ 2021-04-14 16:52  一只测试小菜鸡  阅读(42)  评论(0编辑  收藏  举报