質問
それではこれからの輸入作業、ファイルです。
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コードです。のかを記述することができるお問いったと言えるのでしょうか。