C/C++で開発し、Pythonスクリプトから利用できる関数 データ型を提供
Pythonが動的にロードする共有ライブラリ
(*.so *pyd)
Pythonから呼び出せないCライブラリへのインターフェース
Pythonではパフォーマンス不足
拡張モジュールは面倒
C/C++が必要
せっかくPythonなのにC/C++で書くのか
関数 データ型定義が面倒
参照アカウント管理
Pythonの拡張モジュールを開発するための専用プログラミング言語
Pythonのほぼ上位互換
インタープリタではなくコンパイラ
Pylexからfork
lxml
Sage
SciPy
PyYAML
など
Pythonの構文でC言語と同じ処理を書ける
文法はPython2とほぼ同じ
C言語で書くと面倒だったのが型定義とかかんたんになる
変数の型宣言「も」できる(アーリーバインディング)
型チェックは静的 動的 両方
GIL制御
Pythonスクリプトが複数のスレッドで同時に実行されないように制御する仕組み
型指定をすると処理速度が格段に早くなる
処理時間はほとんど関数呼び出し
$ easy_install cython
def add(a): import time time1 = time.clock() x = 0 for i in range(1, a): x += i time2 = time.clock() time = time2 - time1 print str(time) print x
>>> from test_py import *
>>> add(1000)
0.000167
499500
>>> add(10000)
0.001614
49995000
>>> add(100000)
0.011948
4999950000
>>> add(1000000)
0.094009
499999500000
>>> add(10000000)
0.926426
49999995000000
>>> add(100000000)
10.136141
4999999950000000
>>> import pyximport; pyximport.install(pyimport = True)
(, )
>>> import test_py
>>> add(100000000)
8.450127
4999999950000000
def add(long A): import time time1 = time.clock() cdef long x = 0 for i in range(1, A): x += i time2 = time.clock() time = time2 - time1 print str(time) return x