Python Cの拡張機能を使い始めたばかりで、Pythonから呼び出し可能なC関数は2つのPyObject *引数PyObject *を返します。私は、次の "Hello World" の拡張子を書いた:Python C Extensions - 呼び出し可能なC関数が引数をとり、PyObjectを返す理由*
static void
hello_world()
{
printf("Hello World\n");
}
:
#include <Python.h>
static PyObject *
hello_world(PyObject *self, PyObject *noargs)
{
printf("Hello World\n");
return Py_BuildValue("");
}
// Module functions table.
static PyMethodDef
module_functions[] = {
{ "hello_world", hello_world, METH_NOARGS, "hello world method" },
{ NULL }
};
// This function is called to initialize the module.
PyMODINIT_FUNC
inittesty2(void)
{
Py_InitModule("testy2", module_functions);
}
はなぜ(特にMETH_NOARGS付き)I以下hello_worldメソッドを使用することはできませんか?
Py_Noneで、PyNoneではありません。 'Py_RETURN_TRUE'や' Py_RETURN_FALSE'に似た 'Py_RETURN_NONE'もあります。 – yak
私は間違っていれば私を修正しますが、コードがすべての引数がスタックに渡され、呼び出し先(関数)がそれらをスタックからポップする呼び出し規約を使用していた場合、未使用の引数を削除すると、クラッシュはPythonが常に2番目のargとしてNULLを渡し、関数がポップしないためです。 – yak
@yak私のコードでクラッシュすることはありません。 – jogojapan