質問

それではこれからの輸入作業、ファイルです。

import _functools

Python2.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__'

どうすれば意味の分から_functools輸入部分が読んでいるCコードについて教えてください。

役に立ちましたか?

解決

C コード化されたモジュールを組み込むことができます ( __file__)またはに住んでいます .so または .pyd ダイナミック ライブラリ ( __file__ が示されます) -- これは実装の詳細であり、気にする必要はありません。

コードを学習して、Python で呼び出し可能な C コード化された関数がどのように機能するかを理解したい場合は、 読む 一般に C が最適です (実際の生産性よりもはるかに難しくありません) コーディング C では;-)。ただし、多くの場合、C コードでコーディングされた機能の (示唆的で非権威的な) 「サンプル Python 実装」が見つかり、それを研究することができます。 それらの.

通常 C でコード化される Python 標準ライブラリ機能と同等の Python コード化された機能の特に有益なリポジトリは、 ピピ プロジェクト (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)

読んで理解するのはかなり簡単なことだと思います。

他のヒント

の質問に次の時間を尋ねるときに、より明確にしてください。私はあなたがこれをしたいと仮定します。

>>> import _functools
>>> _functools.__file__
'/usr/lib/python2.6/lib-dynload/_functools.so'

これは私が推測Cで書かれた、共有オブジェクト_functools.soであり、それは実際のfunctoolsモジュールによってインポートされます。なぜあなたはそれからインポートしようとしていますか?確かに、それはあなただけで、同様from functools import partialことができ、しかし、可能です。

のpython2.6については、 _functoolsモジュールは、組み込みです。あなたは単にimport _functools ; repr(_functools)を入力し、ヒットした場合、あなたのインタープリタプロンプトで入力することを確認することができます。

あなたはモジュールのCソースを見たい場合は、チェックアウト<のhref =「http://hg.python.org/cpython/file/d7e85ddb1336/Modules/_functoolsmodule.c」のrel =「nofollowをnoreferrer」 > 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__でアップロードされてから場所を見ることができます。

行動の functools.partial() 機能を記載してい PEP309 で定義されています。のが実際の実装のインすることがC PEPのを含む通信を含む 例Pythonで実装.

この例のコードするのに十分なご理解の挙動 functools.partial().がある場合は特定の問題についてのCの実装について今よりもっと読めのCコードです。のかを記述することができるお問いったと言えるのでしょうか。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top