0

私はこのコードを見つけて疑問に思い始めました。単純にインポートを独自の実装に置き換えてみませんか? 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
4

1 に答える 1

1

部分を含むほとんどの functools は 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

この特定の引用では、インポートは不要であると言えます。とにかくフォールバック関数を定義する必要があるかのように、インポートで2行を無駄にする理由は、次のようにまだ有益であると主張します:

1) ライブラリの関数の方がおそらく高速であり、そうでない場合でも、将来のリリースで高速になる可能性があります (組み込みは時々最適化されます)、または別のプラットフォームで高速になる可能性があります。異なる実装 (たとえば、pypy と cpython) でさえあります。逆もまた真である可能性があります。そのため、特定のパフォーマンスの問題がない限り、以下のポイント 2 がより重要であると思います。

2) コードをレビューする開発者は、標準ドキュメントを参照することで、部分関数が何をするかを理解できます。functools をインポートできない場合でも、試みられたインポートから、純粋な python 実装が何をしようとしているのか、どのように動作すべきかを読者は知ることができます。

于 2015-12-12T18:14:51.357 に答える