Pythonの拡張モジュール勉強メモ1

http://docs.python.org/ext/intro.html


"spam"という作るときには慣例でその実装をするCファイルを"spammodule.c"とつける。
でもモジュール名がある程度長いときには、その最後に".c"をつけただけのファイル名になる。
"spammify" -> spammify.c


ファイルのはじめは

#include <Python.h>

とやってPython APIを取り込む。他の標準ヘッダより先に書く!

で呼び出す関数を書く。
関数は必ず2つの引数持ち、名前は慣例でselfとargs。

static PyObject *
spam_system(PyObject *self, PyObject *args)
{
...


組み込みメソッド作るときだけselfを使う。ただの関数のときにはselfはNULLポインタ。
argsはその名の通り引数を指すタプルへのポインタ。
各要素が呼び出し側の引数リストに対応してる。
これはPython ObjectなのでCで使える形に変換しないといけない。
その変換に使うのがPyArg_ParseTuple()。


モジュール内で何らかのエラーが起きたときは例外を投げるのも慣例。
グローバルに定義されてる領域に例外の理由をセットしてreturn。


値を返す関数を作っている場合は、
PyArg_ParseTuple()でCのデータ型を得て、好きな処理をして
結果を呼び出し元に返すという流れ。
この際returnする値はまたPython Objectに戻さないといけないので、
Py_BuildValue()などを使う。


戻り値がない関数だったら

    Py_INCREF(Py_None);
    return Py_None;

とやる。


続く。