在之前的博客已经讲过装饰器,并且我们知道根据不同的函数(有无参数,有无返回值)可以用不同的装饰器,但是不是可以归纳一下,写出一个通用的装饰器呢?
程序如下:
def func(functionName):
def func_in(*args,**kwargs):
print ('-----生成记录-----')
ret = functionName(*args,**kwargs)
return ret
return func_in
@func
def test(a,b):
print ('----test----')
print ('A=%d,B=%d'%(a,b))
return 'haha'
exe = test(10,19)
print ('返回值是:%s'%exe)
运行结果:
这样,我们就会得到一个既可以传参数,又可以传递返回值的装饰器。
带参数的装饰器:
程序:
def func_arg(arg):
def func(functionNum):
def func_in():
print ('==记录日志==')
print ('----%s-----'%arg)
functionNum()
return func_in
return func
#1.先执行func_arg('haha')函数,这个函数return 的结果是func这个函数的引用
#2.@func
#3.使用@func对test进行装饰
@func_arg('haha')
def test():
print ('--test--')
test()
结果如下: