python装饰器:下边几个装饰器带参数和不带参数例子详解:
我们都知道,python中函数是可以被当做参数进行传递的,所以最直接的装饰器实例如下:
①
def decorator(func):#装饰器函数
print('welcome')
func()
print('end')
def test():
print('hello world')
#将test()方法以参数形式传给方法decorator(func)
decorator(test)
#输出结果:welcome
# hello world
# end
这样写比较麻烦,而且改变了源代码的结构,容易出错
可以使用装饰器,把上例改为:
②
def zhuangshiqi(func):
def decorator():
print('welcome')
func()
print('end')
return decorator
@zhuangshiqi
def test():
print('hello world')
test()
#打印结果welcome
# hello world
# end
装饰器装饰带有参数的函数:
def decorator(func):
def wapper(*args,**kwargs):#存放被装饰函数的参数
print('welcome')
return func(*args,**kwargs)
return wapper
@decorator
def test(n):
print(n*n)
test(3)
#打印结果
#welcome
#9
装饰器和被装饰函数都带有参数:
def decrator(*dargs, **kargs):#接收装饰器传来的参数
def wrapper(func):
def _wrapper(*args, **kwargs):#存放被装饰函数的参数
print(kargs)#打印为一个字典
print(dargs)#打印为一个元组
#你可以在这里利用装饰器的参数添加你想要的功能
return func(*args, **kwargs)
return _wrapper
return wrapper
@decrator(1,2,3,4,5,name='小明',age=18,height=180)
def test(x, y):
t=x*y
print(t)
test(2,3)#打印结果{'name': '小明', 'age': 18, 'height': 180}
# (1, 2, 3, 4, 5)
# 6