4

このインポートはどのように機能し、どのファイルを使用しますか?

import _functools

Python 2.5 の場合:

import _functools
print _functools.__file__

与えます:

Traceback (most recent call last):
  File "D:\zjm_code\mysite\zjmbooks\a.py", line 5, in <module>
    print _functools.__file__
AttributeError: 'module' object has no attribute '__file__'

C コードが読めない場合、(_functools インポート パーシャルから) パーシャルの意味を取得するにはどうすればよいですか?

4

5 に答える 5

3

Cコード化されたモジュールは、組み込み(欠落__file__.soまたは.pydダイナミックライブラリ(それら__file__が示す)に存在する可能性があります。これは、気にする必要のない実装の詳細です。

Pythonで呼び出し可能な、Cでコード化された関数がコードを学習することでどのように機能するかを理解したい場合は、Cの読み方を学ぶのが一般的に最適です(実際にCでコード化するよりもはるかに難しいです;-)。ただし、多くの場合、Cコード化された機能の(示唆的で信頼できない)「サンプルPython実装」を見つけ、それらを調べることができます。

通常CでコーディングされるPython標準ライブラリ機能に相当するPythonコーディングの特に有益なリポジトリは、pypyプロジェクト(PythonでコーディングされたPython実装を実行します)です。そのソースはここで参照でき、もちろんダウンロードして、マシーン。

特に、これはpypyの_functools.py実装です。

""" Supplies the internal functions for functools.py in the standard library """

class partial:
    """
    partial(func, *args, **keywords) - new function with partial application
    of the given arguments and keywords.
    """
    __slots__ = ['func', 'args', 'keywords']

    def __init__(self, func, *args, **keywords):
        if not callable(func):
            raise TypeError("the first argument must be callable")
        self.func = func
        self.args = args
        self.keywords = keywords

    def __call__(self, *fargs, **fkeywords):
        newkeywords = self.keywords.copy()
        newkeywords.update(fkeywords)
        return self.func(*(self.args + fargs), **newkeywords)

読んで理解するのはかなり簡単です、私は願っています!

于 2010-01-09T16:38:58.627 に答える
0

関数の動作は、functools.partial()関数が定義されたPEP309で説明されています。ビルトインの実際の実装は多くの場合CPEPに含まれていますが、これを含め、通常はPythonでの実装例が含まれています。

このサンプルコードは、の動作を理解するのに十分なはずですfunctools.partial()。Cの実装に関係する特定の問題がある場合は、Cコードを読む必要があります。または、おそらくあなたの質問にそれを説明してください、そして誰かが答えを知っているかもしれません。

于 2010-01-09T11:26:36.323 に答える
0

次回質問するときはもっと明確にしてください。私はあなたがこれを望んでいると仮定します

>>> import _functools
>>> _functools.__file__
'/usr/lib/python2.6/lib-dynload/_functools.so'
于 2010-01-09T07:18:19.780 に答える
0

これは C で書かれた共有オブジェクトです。実際のモジュール_functools.soによってインポートされていると思います。functoolsなぜそこからインポートしようとしていますか?もちろん、それは可能ですが、あなたも同じようにできますfrom functools import partial

于 2010-01-09T07:19:02.480 に答える
0

Python2.6 の場合、_functoolsモジュールはビルトインです。import _functools ; repr(_functools)インタープリターのプロンプトで単純に入力してエンターを押すと、それがわかります。

モジュールの C ソースを見たい場合は、http://hg.python.org/cpython/file/d7e85ddb1336/Modules/_functoolsmodule.cをチェックしてください。

このモジュールはインタプリタにコンパイルされるため、属性_functoolsはありません(次の段落を参照)。__file__

Python2.5 の場合、この_functoolsモジュールは C で実装された標準ライブラリ モジュールであり、見たい場合はhttp://hg.python.org/cpython/file/a78381ead4cf/Modules/_functoolsmodule.cで入手できます。import _functools ; print _functools.__file__インタープリタープロンプトで入力すると、モジュールがロードされた場所を確認できます

于 2010-01-09T07:24:02.960 に答える