一個函數可以有多個參數,而在有的情況下有的參數先得到,有的參數需要在后面的情景中才能知道,python 給我們提供了partial函數用于攜帶部分參數生成一個新函數。
def add(a,b,c=2): PRint("a is:%s b is %s c is %s"%(a,b,c)) return a+b+cadd_with_a_b=partial(add,2,3)print(add_with_a_b())# it's 7add_with_a=partial(add,9)print(add_with_a(10))# it's 21
#################
a is:2 b is 3 c is 2
7
a is:9 b is 10 c is 2
21
下面一個列子是用partial來生成了一個裝飾器,用于修改函數的__doc__為另一個函數的
#coding:utf-8'''Created on 2014-10-1@author: zkchen'''from functools import partialPARAMS=("__doc__",)def update_params(target,source,params=PARAMS): #將target的在PARAMS中提到的屬性設置為source的 [setattr(target,p,getattr(source,p,None)) for p in PARAMS] return targetdef update_params_wrap(source): return partial(update_params,source=source,params=PARAMS)def test_partial(): def funcA(): '''this is funcA's doc''' pass @update_params_wrap(funcA) def funcB(): '''this is funcB's doc''' pass print(funcB.__doc__)
#################################
this is funcA's doc
新聞熱點
疑難解答