मैं सिर्फ अजगर सी एक्सटेंशन के साथ खेलते हैं और क्यों एक सी समारोह है, जो अजगर से प्रतिदेय है 2 PyObject रखना चाहिए के रूप में उत्सुक हूँ शुरू कर रहा हूँ * तर्क और एक PyObject * वापस करें। मैं निम्नलिखित "नमस्ते दुनिया" विस्तार लिखा है:अजगर सी एक्सटेंशन - क्यों प्रतिदेय चाहिए सी कार्यों तर्क ले और वापसी PyObject *
#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 के साथ) निम्नलिखित hello_world विधि का उपयोग करें:
static void
hello_world()
{
printf("Hello World\n");
}
?
यह 'Py_None' है, न कि 'PyNone'। 'Py_RETURN_RONE' और' Py_RETURN_FALSE' के समान 'Py_RETURN_NONE' भी है। – yak
के लिए (3), अगर मैं गलत हूं तो मुझे सही करें, लेकिन अगर कोड एक कॉलिंग सम्मेलन का उपयोग कर रहा था, जहां सभी तर्क स्टैक पर पारित होते हैं और कैली (फ़ंक्शन) उन्हें ढेर से पॉप करता है, अप्रयुक्त तर्क को हटाकर एक कारण होगा क्रैश क्योंकि पाइथन हमेशा दूसरे तर्क के रूप में NULL पास करेगा और फ़ंक्शन इसे पॉप नहीं करेगा। – yak
@yak यह मेरे कोड में एक क्रैश का कारण नहीं है। – jogojapan