def home(name):
print('你又来啦')
print(name)
def login(func):
def inner(name):
print('pass')
return func(name)
return inner
def login1(a,b):
def inner(name):
print('diyipass')
def wa(*name1):
a(*name1)
b(*name1)
#name(name1)
return name(*name1)
return wa
return inner
#def login(func):
# print('pass')
# return func
#@login#在不调用任何函数的情况下,这条语句依然会被执行
#@login
def DIANNAO(name):
print('你还来')
print(name)
@login1(DIANNAO,home)
def TV(name):
print('你来啦')
return 4
#@login
tv=login(TV)#装饰器里面只有一层,直接将功能函数赋给装饰器,
#让装饰器去执行
print(tv)
'''
传递进去的就是一个内存地址
'''
tv('alex')
p=tv('alex')
print(p)
m=login(DIANNAO)
m('mei')
o=TV('alex')
print(o)
'''
个人总结,装饰器就是包含,和顺序执行
有些强大的装饰器框架
再下次调用的时候只需要写函数就可以啦
写一个装饰器的成本比较高。
要调用的时候可以直接调用函数
'''
print('邪恶的------')
t=login1(DIANNAO,home) #返回的inner的内存地址,这个时候没有实例化
#只是将函数赋给longi1,DIANNAO,home分别表示连个函数
print(t)#打印出inner函数的内存地址
p=t(tv)#这个时候也没有进行实例化,将功能函数赋值给装饰器
print(p)#打印出要执行函数的内存地址
m=p('alex')#进行实例化
print('m',m)#打印出返回结果,这个返回结果建议使用
#return name(*name1),这种模式,这样可以接收功能函数的返回值
print('你好')
TV('alex') #直接利用装饰器进行的功能函数的实例化