导入 functools 比自己的 pure-Python impl 有什么好处?
Benefits to importing functools over own pure-Python impl?
我找到了这段代码并开始思考,为什么不简单地用自己的实现替换导入呢? 使用 functools.partial 有任何(性能)优势吗? 它是以纯 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 编写的,这里是 header 来自 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 vs cpython)。反之亦然,这就是为什么我认为下面的第 2 点更为重要,除非您有特定的性能问题。
2) 任何查看您的代码的开发人员都可以通过参考标准文档了解您的部分函数的作用。即使无法导入 functools,任何 reader 都可以从尝试的导入中看到纯 python 实现将要做什么,以及它应该如何表现。
我找到了这段代码并开始思考,为什么不简单地用自己的实现替换导入呢? 使用 functools.partial 有任何(性能)优势吗? 它是以纯 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 编写的,这里是 header 来自 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 vs cpython)。反之亦然,这就是为什么我认为下面的第 2 点更为重要,除非您有特定的性能问题。
2) 任何查看您的代码的开发人员都可以通过参考标准文档了解您的部分函数的作用。即使无法导入 functools,任何 reader 都可以从尝试的导入中看到纯 python 实现将要做什么,以及它应该如何表现。