簡體   English   中英

使用C擴展名擴展python

[英]extending python using C extensions

我正在嘗試學習如何使用C擴展來擴展python,到目前為止,我已經能夠通過官方python文檔進行相同的操作。

通過瀏覽,我發現了這個有用的資源,它解釋了如何使用C擴展來擴展python。 因此,示例如下所示:

#include <Python.h>

int
_fib(int n)
{
    if (n < 2)
        return n;
    else
        return _fib(n-1) + _fib(n-2);
}

static PyObject*
fib(PyObject* self, PyObject* args)
{
    int n;

    if (!PyArg_ParseTuple(args, "i", &n))
        return NULL;

    return Py_BuildValue("i", _fib(n));
}

static PyMethodDef FibMethods[] = {
    {"fib", fib, METH_VARARGS, "Calculate the Fibonacci numbers."},
    {NULL, NULL, 0, NULL}
};

PyMODINIT_FUNC
initfib(void)
{
    (void) Py_InitModule("fib", FibMethods);
}

但是,我很難理解這段代碼的作用:

int
_fib(int n)
{
    if (n < 2)
        return n;
    else
        return _fib(n-1) + _fib(n-2);
}

特別是函數名稱的_部分。

如果有人能解釋以上代碼的作用,我將非常感激。

這只是簡單的C代碼。 _fib函數計算第n個斐波那契數

名稱開頭的_沒有任何特殊含義。 通常 (至少在python社區中)用於表示“私有”功能。 他們可能將_fib用於C函數,因為他們想將fib用於包裝器。

我相信該示例旨在說明如何將核心功能實現為純C語言,並添加一個可從python訪問的包裝器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM