簡單聊聊Python中的wraps修飾器

2021-08-20 12:27:16 字數 1998 閱讀 6190

首先說partial函式,在官方文件的描述中,這個函式的宣告如下:functools.partial(func, *args, **keywords)。它的作用就是返回乙個partial物件,當這個partial物件被呼叫的時候,就像通過func(*args, **kwargs)的形式來呼叫func函式一樣。如果有額外的位置引數(args)或者關鍵字引數(*kwargs)被傳給了這個partial物件,那它們也都會被傳遞給func函式,如果乙個引數被多次傳入,那麼後面的值會覆蓋前面的值。

個人感覺這個函式很像c++中的bind函式,都是把某個函式的某個引數固定,從而構造出乙個新的函式來。比如下面這個例子:

from functools import partial

defadd

(x:int, y:int):

return x+y

# 這裡創造了乙個新的函式add2,只接受乙個整型引數,然後將這個引數統一加上2

add2 = partial(add, y=2)

add2(3) # 這裡將會輸出5

這個函式是使用c而不是python實現的,但是官方文件中給出了python實現的**,如下所示,大家可以進行參考:

def

partial

(func, *args, **keywords):

defnewfunc

(*fargs, **fkeywords):

newkeywords = keywords.copy()

newkeywords.update(fkeywords)

return func(*args, *fargs, **newkeywords)

newfunc.func = func

newfunc.args = args

newfunc.keywords = keywords

return newfunc

'__annotations__')

deffor attr in assigned:

try:

except attributeerror:

pass

else:

for attr in updated:

首先我們寫個自定義的修飾器,沒有任何的功能,僅有文件字串,如下所示:

def

(f):

def(*args, **kwargs):

"""這個是修飾函式"""

return f(*args, **kwargs)

def():

"""這個是被修飾的函式"""

def

(f):

def(*args, **kwargs):

"""這個是修飾函式"""

return f(*args, **kwargs)

def():

"""這個是被修飾的函式"""

'__annotations__')

defwraps

assigned=assigned, updated=updated)

from functools import wraps

def(f):

@wraps(f)

def(*args, **kwargs):

"""這個是修飾函式"""

return f(*args, **kwargs)

def():

"""這個是被修飾的函式

"""

python3 functools.wraps

python裝飾器和functools模組

github - cpython functools原始碼

簡單聊聊Python中的wraps修飾器

摘要 python 中的wraps修飾器分析 首先說partial函式,在官方文件的描述中,這個函式的宣告如下 functools.partial func,args,keywords 它的作用就是返回乙個partial物件,當這個partial物件被呼叫的時候,就像通過func args,kwar...

簡單聊聊Python中的wraps修飾器

首先說partial函式,在官方文件的描述中,這個函式的宣告如下 functools.partial func,args,keywords 它的作用就是返回乙個partial物件,當這個partial物件被呼叫的時候,就像通過func args,kwargs 的形式來呼叫func函式一樣。如果有額外...

簡單聊聊Python中的wraps修飾器

首先說partial函式,在官方文件的描述中,這個函式的宣告如下 functools.partial func,args,keywords 它的作用就是返回乙個partial物件,當這個partial物件被呼叫的時候,就像通過func args,kwargs 的形式來呼叫func函式一樣。如果有額外...