首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用functools.partial()有成本吗?

使用functools.partial()有成本吗?
EN

Stack Overflow用户
提问于 2014-10-07 01:28:42
回答 3查看 426关注 0票数 0

高阶函数functools.partial()可以创建如下新函数:

代码语言:javascript
复制
newf(arg1) = functools.partial( f, arg1, val )

这显然相当于说

代码语言:javascript
复制
def newf(arg1): return f( arg1, val )

就他们的所作所为而言。但是表演呢?functools.partial()是否真的创建了一个不需要调用f的新函数,或者它们是完全相同的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-07 01:38:55

代码语言:javascript
复制
> import functools
> def nop():
...:     pass
...: 

> %timeit nop()
10000000 loops, best of 3: 63.5 ns per loop

> %timeit functools.partial(nop)()
1000000 loops, best of 3: 205 ns per loop

所以我想说,除非你在做一些愚蠢的事情,否则它看起来很琐碎。如果我们要多次调用这个部分的话,我们可以拿回其中的大部分:

代码语言:javascript
复制
> f = functools.partial(nop)
> %timeit f()
10000000 loops, best of 3: 86.7 ns per loop
票数 2
EN

Stack Overflow用户

发布于 2014-10-07 01:34:41

这是python3.4中functools.partial的源代码:

代码语言:javascript
复制
def partial(func, *args, **keywords):
    """New function with partial application of the given arguments
    and keywords.
    """
    def newfunc(*fargs, **fkeywords):
        newkeywords = keywords.copy()
        newkeywords.update(fkeywords)
        return func(*(args + fargs), **newkeywords)
    newfunc.func = func
    newfunc.args = args
    newfunc.keywords = keywords
    return newfunc

try:
    from _functools import partial
except ImportError:
    pass

在顶部,它定义了一个纯python的回退版本,在底部,它试图导入C版本。您可以找到C代码这里

票数 1
EN

Stack Overflow用户

发布于 2014-10-07 02:03:47

下面是partial的当前实现。

你明白吗?其他人问,但我发现很难解释清楚,因为所有的内部和外部的功能。

代码语言:javascript
复制
def partial(func, *args, **keywords):
    """New function with partial application of the given arguments
    and keywords.
    """
    def newfunc(*fargs, **fkeywords):
        newkeywords = keywords.copy()
        newkeywords.update(fkeywords)
        return func(*(args + fargs), **newkeywords)
    newfunc.func = func
    newfunc.args = args
    newfunc.keywords = keywords
    return newfunc
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26227287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档