#
5.2 超高水準の埋め込みから踏み出す: 概要

高水準インタフェースは、断片的な Python コードをアプリケーションから 実行できるようにしてくれますが、アプリケーションと Python コードの 間でのデータのやり取りは、控えめに言っても煩わしいものです。 データのやり取りをしたいなら、より低水準のインタフェース呼び出しを 利用しなくてはなりません。より多く C コードを書かねばならない 代わりに、ほぼ何でもできるようになります。

Python の拡張と埋め込みは、趣旨こそ違え、同じ作業であるということ に注意せねばなりません。これまでの章で議論してきたトピックの ほとんどが埋め込みでもあてはまります。これを示すために、 Python から C への拡張を行うコードが実際には何をするか考えて みましょう:

1. データ値を Python から C に変換する。
2. 変換された値を使って C ルーチンの関数呼び出しを行い、
3. 呼び出しで得られたデータ値 C から Python に変換する。

Python を埋め込む場合には、インタフェースコードが行う作業は以下の ようになります:

1. データ値を C から Python に変換する。
2. 変換された値を使って Python インタフェースルーチンの 関数呼び出しを行い、
3. 呼び出しで得られたデータ値 Python から C に変換する。

一見して分かるように、データ変換のステップは、言語間でデータを 転送する方向が変わったのに合わせて単に入れ替えただけです。 唯一の相違点は、データ変換の間にあるルーチンです。 拡張を行う際には C ルーチンを呼び出しますが、埋め込みの 際には Python ルーチンを呼び出します。

この章では、Python から C へ、そしてその逆へとデータを変換する 方法については議論しません。また、正しい参照の使い方やエラーの 扱い方についてすでに理解しているものと仮定します。 これらの側面についてはインタプリタの拡張と何ら変わるところが ないので、必要な情報については以前の章を参照できます。