functools.partial的文档说它"大致相当于":
def partial(func, *args, **keywords):
def newfunc(*fargs, **fkeywords):
newkeywords = keywords.copy()
newkeywords.update(fkeywords)
return func(*(args + fargs), **newkeywords) # line to change
newfunc.func = func
newfunc.args = args
newfunc.keywords = keywords
return newfunc
Run Code Online (Sandbox Code Playgroud)
如果我想实现一个预先附加参数的版本,似乎我只需要更改指示的行.
在复制此代码时,我是否应该担心其他功能/陷阱?
看一下源代码_functoolsmodule.c,我认为不用担心.
的模块实现partial手柄酸洗和repr,但一切看起来像它的工作原理,如文档中因此推测它用C实现的原因仅仅是为了提高效率.还有一个事实是它是一种类型,而不仅仅是一个函数闭包.
但请注意,在文档示例中func,args并且keywords纯粹是装饰性的; 它们不像实际functools.partial情况那样可以覆盖.一种替代方案是子类functools.partial:
class rpartial(partial):
def __call__(self, *args, **kwargs):
kw = self.keywords.copy()
kw.update(kwargs)
return self.func(*(args + self.args), **kwargs)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2260 次 |
| 最近记录: |