2007-07-15

[メモ] Python C/APIを使っていて、気づいたこと、作法など

Python標準のlistやdictを関数から返すときはそのまま普通につくって返す。しかし、そこでキーなどを設定するときに作ったオブジェクトはDECREFしておくようだ。(多分)
うーん、しかし、こんなに煩雑になるんだけどいいんだろうか。。。


PyObject* getSomeDict(PyObject* self, PyObject* args){
PyDictObject* result = PyDict_New();
if(result == NULL) return NULL;

PyStringObject* key = PyString_FromString("age");
if(key == NULL){
Py_DECREF(result);
return NULL;
}
PyIntObject* value = PyInt_FromLong(32L);
if(value == NULL){
Py_DECREF(result);
Py_DECREF(key);
return NULL;
}
if(PyDict_SetItem(result, key, value) == -1){
Py_DECREF(key);
Py_DECREF(value);
Py_DECREF(result);
return NULL;
}
Py_DECREF(key);
Py_DECREF(value);
return result;
}