python-装饰器

1、简单装饰器
例如:
def login(func):

def inner(y):
print('恭喜,验证通过!')
func(y)
return inner
@login
def TV(x):
print('这就是 %s 。。。。' %x)


TV('hah')
 

 结果:恭喜,验证通过!
    这就是 hah 。。。。


流程:执行TV()时,首先是将被装饰的函数名作为装饰函数的参数执行装饰函数(此例中是将TV作为参数传入到login中并执行该函数),在执行完login函数后就返回该函数的返回值,
然后有将被装饰函数的参数作为参数传入到login函数返回值(返回函数)并执行(此例中是将TV中的参数作为inner的参数传入inner中并执行该函数)!

2、带参数的复杂装饰器
例如:
def x(can1,*args,**kwargs):

print('这是x函数的结果!')
return
def y(can2,*args,**kwargs):
print('这是y函数的结果!')
return
def fuhe(can3,can4,*args,**kwargs):
def fan1(can5,*args,**kwargs):
def fan2(can6,*args,**kwargs):
can3(can6)
can4(can6)
can5(can6)

return fan2
return fan1


@fuhe(x,y,)
def z(h):
print('这是z函数的结果!')
return


z(2)
结果:

这是x函数的结果!
这是y函数的结果!
这是z函数的结果!

过程:将x,y这两个函数作为参数传给fuhe函数的can3,can4,将被装饰函数的函数名作为参数传给函数fan1的can5作为参数,然后将被装饰函数的参数作为参数传给函数fan2的can6,并执行代码!(原理和简单的装饰器一样,除了第一步将x,y这两个函数作为参数传给fuhe函数的can3,can4!)

原文地址:https://www.cnblogs.com/zhangyuxin/p/6270199.html