、新しい関数オブジェクトが作成され、機能コードが解析され、 bytecompiled ["func_code"属性に保存されているので、その関数を呼び出すと、インタープリタはそのバイトコードを読み込んで実行します。
Pythonで使用できるようにC/Python APIの後に同じ関数を書くと、インタプリタは関数オブジェクトを作成しますが、この関数はバイトコードを持たないでしょう。 インタプリタがその関数を呼び出すと、実際のC関数を呼び出します。したがって、 "マシン"速度で実行され、 "python-machine"速度では実行されません。
あなたはCで書かれたこのチェック機能を確認することができます。
>>> map.func_code
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'builtin_function_or_method' object has no attribute 'func_code'
>>> def mymap():pass
...
>>> mymap.func_code
<code object mymap at 0xcfb5b0, file "<stdin>", line 1>
あなたは公式サイトのガイドに従ってくださいPythonの使用のためのCコードを書くことができる方法を理解するために。
とにかく、N次元配列計算を行うだけなら、numpyで十分です。
+1 Numpyを使って重い作業を行うPythonの実装に対して、コア計算の純粋なC実装をベンチマークする必要があります。 Numpyの実装が競争力を持つ可能性は十分あります。 Numpyの場合は – divegeek
+1。 Numpyが望むことをすれば、コードを最適化するためにかなりの時間を費やすことなく、書くことができるよりも速くなるという非常に良い機会があります。 –