partial设置部分给定参数的函数 源码分析
def partial(func, *args, **keywords):
"""部分给定参数的新函数.
"""
if hasattr(func, 'func'):
#将已给定参数和未给定参数相加赋值给args
args = func.args + args
tmpkw = func.keywords.copy()
tmpkw.update(keywords)
#将已设置的关键字参数先赋值给keywords
keywords = tmpkw
# 将原函数func的关键字参数删除
del tmpkw
func = func.func
def newfunc(*fargs, **fkeywords):
'''返回带完整参数的新函数'''
#拷贝原函数的关键字参数给新函数
newkeywords = keywords.copy()
newkeywords.update(fkeywords)
return func(*(args + fargs), **newkeywords)
#新函数的函数属性修改为func
newfunc.func = func
#新函数的普通参数修改为给定参数+未给定参数
newfunc.args = args
#新函数的普通函数修改为给定关键字参数+未给定关键字参数
newfunc.keywords = keywords
return newfunc
def test_func(a=1, b=2):
return a + b
myfunc = partial(test_func, 1)
print(myfunc(2))