python func_Python functool module
1.functools.partial(func,*args,**keywords)
實現
def partial(func, *args, **keywords):def newfunc(*fargs, **fkeywords):
newkeywords=keywords.copy()
newkeywords.update(fkeywords)return func(*args, *fargs, **newkeywords)
newfunc.func=func
newfunc.args=args
newfunc.keywords=keywordsreturn newfunc
例子
>>> from functools importpartial>>> basetwo = partial(int, base=2)>>> basetwo.__doc__ = 'Convert base 2 string to an int.'
>>> basetwo('10010')18
2.functools.update_wrapper(wrapper,wrapped,assigned=WRAPPER_ASSIGNMENTS,updated=WRAPPER_UPDATES)
將wrapper function更新為wrapped function,多用于decorator,以decorator module中提到的一個例子(用于實現緩存)
defmemoize_uw(func):
func.cache={}def memoize(*args, **kw):if kw: #frozenset is used to ensure hashability
key =args, frozenset(kw.items())else:
key=argsif key not infunc.cache:
func.cache[key]= func(*args, **kw)returnfunc.cache[key]return functools.update_wrapper(memoize, func)
這里memoize就是wrapper function,func就是wrapped function。最簡單情況下調用memoize_uw應該返回一個memoize的實例,然后調用memoize返回func,這樣我們得到的是memoize的實例。但是,我們希望得到的是被包裝函數,也就是func的實例,實際上memoize和func的差別很小,我們可以通過一個函數實現。函數wrapper function中默認參數assigned“指派”的內容包括__module__, __name__, __qualname__, __annotations__, __doc__,使用默認參數update“更新”的是__dict__,指派的意思是覆蓋,更新的意思是添加了func.attrF,也就是說memoize方法內聲明的屬性(memoize.attrM)會被保留,但是訪問方法會更名為func.attrM。
在以下的示例中,使用update_wrapper和直接返回memoize的區別就是訪問f1.__doc__得到的是"Simulate some long computation"還是None
@memoize_uwdeff1(x):"Simulate some long computation"time.sleep(1)return x
3.@functools.wraps(wrapped,assigned=WRAPPER_ASSIGNMENTS,updated=WRAPPER_UPDATES)
wraps是update_wrapper的語法糖,從parameter來看就知道少了一個wrapper,于是乎就可以寫成
defmemoize_uw(func):
func.cache={}
@wraps(func)def memoize(*args, **kw):if kw: #frozenset is used to ensure hashability
key =args, frozenset(kw.items())else:
key=argsif key not infunc.cache:
func.cache[key]= func(*args, **kw)returnfunc.cache[key]return memoize
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python func_Python functool module的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 异地卡可以办网银吗?
- 下一篇: python输出结果空格分割_用Pyth