日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python func_Python functool module

發布時間:2023/12/3 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。