我发现了这段代码,开始想,为什么不简单地用自己的实现替换导入呢使用functools.partal对(性能)有好处吗它是用纯Python实现的还是用本机代码实现的?
try:
from functools import partial
except ImportError:
# http://docs.python.org/library/functools.html#functools.partial
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 = keywords
return newfunc
大多数functools,包括partial,都是用C编写的,这是functools.py 的标题
"""functools.py - Tools for working with functions and callable objects
"""
# Python module wrapper for _functools C module
# to allow utilities written in Python to be added
# to the functools module
在这个具体的引用中,可以说导入是不必要的,好像你无论如何都必须定义回退函数,为什么要在导入上浪费两行,我认为这仍然是有益的,因为:
1) 库中的函数可能更快,即使不是,它也可能在未来的版本中变得更快(内置程序确实会不时进行优化),或者它可能在不同的平台上更快,甚至在不同的实现中更快(例如pypy与cpython)。反之亦然,这就是为什么我认为下面的第2点要重要得多,除非你有特定的性能问题。
2) 任何审查代码的开发人员都可以通过参考标准文档来理解分部函数的作用。即使不能导入functools,任何读者都可以从尝试导入中看到纯python实现将要做什么,以及它应该如何表现。