这里有一个C语言的快速n’dirty示例,它相当于。。。>>> import mymath
>>> m = mymath.math()
>>> print '1 + 2 = %d' % m.add(1, 2)
注意,我已经将模块从test重命名为mymath,因为标准Python库中有一个名为test的模块。#include
#include
#include
#include
int main()
{
setenv("PYTHONPATH", ".", 1);
Py_Initialize();
PyObject* module = PyImport_ImportModule("mymath");
assert(module != NULL);
PyObject* klass = PyObject_GetAttrString(module, "math");
assert(klass != NULL);
PyObject* instance = PyInstance_New(klass, NULL, NULL);
assert(instance != NULL);
PyObject* result = PyObject_CallMethod(instance, "add", "(ii)", 1, 2);
assert(result != NULL);
printf("1 + 2 = %ld\n", PyInt_AsLong(result));
Py_Finalize();
return 0;
}
…哪个输出。。。$ gcc foo.c -lpython2.7 && ./a.out
1 + 2 = 3
但是,如果在Py_Initialize和Py_Finalize之间使用Python/C API做了大量的工作,则必须监视引用计数,并在适当时使用Py_INCREF和Py_DECREF。