先看一下這段**
def
decorator
( func ):
deff
( *args, **kw ):
print('f')
return func( *args, **kw )
return f
@decorator
deffunc
(): print('func')
if __name__ == '__main__':
func()
print(func.__name__)
結果:
f
func
f
我們知道函式名func其實也是乙個變數,上面的**我們看到func.__name__
的值應該是func
但是經過裝飾器裝飾後變成了f
,為了解釋這種現在我們再看下面一段**。
def
decorator
( func ):
deff
( *args, **kw ):
print('f')
return func( *args, **kw )
return f
#去掉了裝飾器
deffunc
(): print('func')
#看這一句
func = decorator(func)
if __name__ == '__main__':
func()
print(func.__name__)
結果:
f
func
f
和裝飾器的結果一樣,這段**就解釋了裝飾器的的原理,實際上經過裝飾器修飾的函式已經不是原來的函式,而是變成裝飾器返回的函式,這樣就解釋了為什麼func.__name__
的值為什麼變成了f
我們並不希望我們的函式名字程式設計f我們還是想我們的func.name=」func」我們可以使用python提供的裝飾器
from functools import wraps
defdecorator
( func ):
@wraps(func) #這裡新增了python的裝飾器
deff
( *args, **kw ):
print('f')
return func( *args, **kw )
return f
@decorator
deffunc
(): print('func')
if __name__ == '__main__':
func()
print(func.__name__)
'''結果:
ffunc
func #名字已經變回來了
'''
如果想要了解其他的裝飾器內容請看《類裝飾器》 python裝飾器理解 python裝飾器理解
裝飾器 在不改變原函式的 和呼叫方法的基礎上,給原函式增加額外的功能 理解宣告 為了方便理解,以下例子採用最簡潔的函式和新增的功能 給原函式新增乙個執行時間 import time def timer func def inner func return inner timer func timer...
python裝飾器 理解Python裝飾器
在python中,對於乙個函式,若想在其執行前後做點什麼,那麼裝飾器是再好不過的選擇,話不多說,上 usr bin env coding utf 8 script 01.py author howie from functools import wraps def decorator func wr...
python裝飾器理解 python裝飾器的理解
python裝飾器應該算是面試常考到的用點,之前在flask的應用中也是會常常用到,抽空仔細看書查資料理解了下裝飾器的概念,通過自己的理解記憶,應該對這個概念會有乙個大致上具體的了解。閉包說起python裝飾器,我們應該不得不談談閉包的概念。我對閉包的理解是,當函式存在巢狀,子函式呼叫了父函式的變數...