帶 C 擴充套件的 Hello World
以下 C 原始檔(我們將其稱為 hello.c
用於演示目的)生成一個名為 hello
的擴充套件模組,其中包含單個函式 greet()
:
#include <Python.h>
#include <stdio.h>
#if PY_MAJOR_VERSION >= 3
#define IS_PY3K
#endif
static PyObject *hello_greet(PyObject *self, PyObject *args)
{
const char *input;
if (!PyArg_ParseTuple(args, "s", &input)) {
return NULL;
}
printf("%s", input);
Py_RETURN_NONE;
}
static PyMethodDef HelloMethods[] = {
{ "greet", hello_greet, METH_VARARGS, "Greet the user" },
{ NULL, NULL, 0, NULL }
};
#ifdef IS_PY3K
static struct PyModuleDef hellomodule = {
PyModuleDef_HEAD_INIT, "hello", NULL, -1, HelloMethods
};
PyMODINIT_FUNC PyInit_hello(void)
{
return PyModule_Create(&hellomodule);
}
#else
PyMODINIT_FUNC inithello(void)
{
(void) Py_InitModule("hello", HelloMethods);
}
#endif
要使用 gcc
編譯器編譯檔案,請在你喜歡的終端中執行以下命令:
gcc /path/to/your/file/hello.c -o /path/to/your/file/hello
要執行我們之前編寫的 greet()
函式,請在同一目錄中建立一個檔案,並將其命名為 hello.py
import hello # imports the compiled library
hello.greet("Hello!") # runs the greet() function with "Hello!" as an argument