3

現在Cython、いくつかのネットワーキングおよび DB ライブラリへのバインディングを作成するために使用しています。も使用したいのですSDLが、バインディングにPySDL2使用します。インタプリタ全体ですが、ctypes単なるライブラリです。しかし、ほとんどの場合、互いの代替として描かれています。したがって、互換性があるかどうかはまったくわかりません。CythonctypesCythonctypes

では、質問: とを 1 つのプロジェクトCythonで一緒に使用することは可能ですか?ctypes

4

1 に答える 1

5

両方のツールがどのように機能するかの簡単な要約を次に示します。

cffictypes は、共有ライブラリ (.soまたは.dllファイル) をロードし、それらのライブラリで定義された関数をラップするコードを最初にコンパイルすることなく呼び出すことができる、というライブラリに対する非常に Pythonic なラッパーです。呼び出す関数について ctypes に伝える必要があります。これにより、python 型 ( int、など) から共有ライブラリ ( 、などstr) で表現される abi に変換できます。uint32_tchar *

Cython は、C トランスレータへの「一種の python」です。生成された C コードはコンパイルでき、その結果、Python C 拡張機能として適切な機能をすべて備えた特別な種類の共有ライブラリ (.soまたは再び) が得られます。.dllCython は非常にスマートで、入力の型注釈に基づいて、C 関数を直接呼び出すコード ( を使用する場合) を発行するか、 C apicdefを介して通常の python オブジェクトを呼び出すコードを発行するかを認識します。PyObject_Call

Cython ソースでは C と python を (多かれ少なかれ) 自由に混在させることができるため、Cython ライブラリで PySDL2 を使用するのに問題はありません。通常の python のように呼び出し、インポートし、呼び出すだけで、すべてが「問題なく動作するはずです」 "。

とは言うものの、コードに宣言を直接含めるとlibsdl、低レベルの C 型から Python 型への変換のオーバーヘッドを回避するために、タイトな内部ループから SDL を呼び出す場合に、ctypesそれらを元に戻すことができるという利点があります。また。アプリケーションが少し大きくなり、パフォーマンスのボトルネックに気付くまで、おそらくそれを延期することができます.

于 2013-09-28T19:55:39.517 に答える