首先說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函式一樣。如果有額外...