1. 程式人生 > >python裝飾器擴充套件之functools.wraps

python裝飾器擴充套件之functools.wraps

我們知道函式被裝飾器,裝飾後,所有的屬性,以及內建函式就失效了。

原因是函式型別變成了warpper型別

 

示例1:不帶wraps裝飾器示例

def warfunc(func):
    def warpper(*args,**kwargs):
        print('warpper demo')
        ret = func(*args,**kwargs)
        return ret
    return warpper


@warfunc
def demofunc():
    print('func demo')

demofunc()
print(demofunc)

輸出結果:

D:\python36\python3.exe D:/untitled4/temp7.py
warpper demo
func demo
<function warfunc.<locals>.warpper at 0x035432B8>

 

**從輸出結果標記紅色部分可以看出,這個函式型別是一個warpper裝飾器。那麼內建函式也失效了。如help(demofunc())

 

示例2:帶wraps裝飾器的

from functools import wraps

def warfunc(func):
    @wraps(func)
    
def warpper(*args,**kwargs): print('warpper demo') ret = func(*args,**kwargs) return ret return warpper @warfunc def demofunc(): print('func demo') demofunc() print(demofunc)

輸出結果:

D:\python36\python3.exe D:/untitled4/temp7.py
warpper demo
func demo
<function demofunc at 0x038632B8>

 

**從輸出結果標記紅色部分,可以看出,這個型別是一個funciton;需要注意的引用包from functools import wraps