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') #直接利用裝飾器進行的功能函數的實例化