9

Python 拡張機能を作成したいと考えており、Cython を使用するというアイデアが本当に気に入っています。主に、それについてより多くの知識を得て、もしあれば速度の向上を利用するためです。私はかなりの Cython ドキュメントを読みましたが、私は (まだ) コンピューター科学者ではなく、低レベルの基本を理解するための深い知識を持っていません。したがって、次の質問の理由は次のとおりです。

開発中の Python 拡張機能に、外部からインポートしたもの (たとえば、ORM または SQL ライブラリ、またはその他のサードパーティ ライブラリ) を使用するとどうなるのだろうか?

Cython はどのように処理しますか?

このインポートされたライブラリ/拡張機能が純粋な Python であるか、それともコンパイルされている場合に違いはありますか?

これを処理する正しい方法は何ですか?

ありがとうございました。

PS。質問は太字で入力されます。

4

1 に答える 1

9

cython の目標は、python と互換性を持たせることです。つまり、任意の python コードを cython 化して以前と同じように動作させることです。現在、Python コードの大部分はすでに動作しています。さらに、Cython を使用すると、コードの一部を最適化し、より効率的な C コードにコンパイルできます。

そうは言っても、Pythonのインポートはデフォルトのままです。それらへの呼び出しは、python コマンドとして発行されます。モジュールが C で書かれている場合でも、cython は python 経由で迂回してモジュールの関数を呼び出します。C ライブラリを直接使用する場合は、cython バインディングが必要です。cythonのドキュメントに、これを行う方法が説明されています

通常、python は監督者として機能し、モジュール/クラスのスコープを処理します。1 つのモジュール内のコードが python 関数を呼び出す (または python 変数にアクセスする) 場合、python は呼び出し元のスコープに従って呼び出しを解決します。呼び出された関数がたまたま 2 番目のモジュールにある場合、python は喜んでそれを使用しています。呼び出し元は結果を取得するだけで、他の関数が別のモジュールにあったかどうかは気にする必要はありません。したがって、鍵となるのは、呼び出される関数を決定する Python のスコープ規則です。

于 2012-12-21T16:53:47.100 に答える