C API del módulo de extensión en Python | conjunto 2

Requisito previo: API de C del módulo de extensión en Python | Serie 1

Veamos un ejemplo de un nuevo módulo de extensión que carga y usa estas funciones API que desarrollamos en el artículo anterior.

Código #1:

#include "pythonsample.h"
/* An extension function that uses the exported API */
static PyObject *print_point(PyObject *self, PyObject *args)
{
    PyObject *obj;
    Point *p;
    if (!PyArg_ParseTuple(args, "O", &obj))
    {
        return NULL;
    }
    /* Note: This is defined in a different module */
    p = PyPoint_AsPoint(obj);
    if (!p)
    {
        return NULL;
    }
    printf("%f %f\n", p->x, p->y);
    return Py_BuildValue("");
}
  
static PyMethodDef PtExampleMethods[] =
{
    {"print_point", print_point, METH_VARARGS, "output a point"},
    { NULL, NULL, 0, NULL}
};
  
static struct PyModuleDef ptexamplemodule =
{
    PyModuleDef_HEAD_INIT,
    /* name of module */
    "ptexample", 
    /* Doc string (may be NULL) */
    "A module that imports an API", 
    /* Size of per-interpreter state or -1 */
    -1, 
    /* Method table */
    PtExampleMethods 
      
};

 
Código #2: función de inicialización del módulo

PyMODINIT_FUNC
PyInit_ptexample(void)
{
    PyObject *m;
      
    m = PyModule_Create(&ptexamplemodule);
      
    if (m == NULL)
        return NULL;
      
    /* Import sample, loading its API functions */
    if (!import_sample())
    {
        return NULL;
    }
      
    return m;
}

Ahora, para compilar este nuevo módulo, no es necesario preocuparse por cómo vincularse con cualquiera de las bibliotecas o el código del otro módulo. Uno puede simplemente usar work.pyel archivo como se muestra a continuación.

Código #3:

# setup.py
from distutils.core import setup, Extension
  
# May need pythonsample.h directory
setup(name ='ptexample', 
      ext_modules = [ Extension('ptexample', 
                     ['ptexample.c'], include_dirs = [], )])

Después de realizar toda esta tarea, esta nueva función de extensión funciona perfectamente con las funciones de la API de C definidas en el otro módulo.

Código #4: Uso de las funciones de la API de CPI definidas en el otro módulo

import ptexample
import work
  
point1 = work.Point(2, 3)
print ("Point_1 : ", point1)
  
print ("\n", ptexample.print_point(p1))

Producción :

Point_1 : 

2.000000 3.000000

Publicación traducida automáticamente

Artículo escrito por manikachandna97 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *