Hello reader,
The last article on CPython, we talked about calling a simple hello world function from a python script. Read about it here.
Let us talk about printing the attributes of a python list object as defined in C
Task: Print the number of items in a list object
Let's write the C program.
#include <stdio.h>
#include <Python.h>
void print_hello()
{
printf("Hello, world!\n");
}
void printListSize(PyListObject *obj)
{
PyObject *p = (PyObject *)obj;
int size = PyList_Size(p);
printf("No of items in List : %d\n", size);
}
hello.c
ii. Compile the C program. The compilation process is different now seeing we included the Python.h library
wisdom@ubuntu:~/text$ gcc -shared -Wl,-soname,hellolib.so -o hellolib.so -fPIC -I/usr/include/python3.10 hello.c
Compiling our c program into a dynamic library
iii. Now edit your main.py function to call the printListSize function in our C code
#!/usr/bin/python3
import ctypes
lib = ctypes.CDLL("./hellolib.so")
lib.print_hello()
lib.printListSize.argtypes = [ctypes.py_object]
my_list = [1, 2, 3, 4, 5]
lib.printListSize(my_list)
iv. Last step is to call our printlistSize function in our C library. If everything goes fine we should get the output below
wisdom@ubuntu:~/text$ python3 main.py
Hello, world!
No of items in List : 5
That's all for now.
Keep in mind, you can also find some other attributes of a list apart from PyList_Size
.
Other useful functions you can try are listed here.
Take care.