C 확장 모듈을 만드는 것은 ctypes를 사용하는 것보다 훨씬 복잡하지만, 파이썬 C API를 사용하면 상대적으로 직관적으로 쉽게 구현할 수 있다. 이를 보여주기 위해, 앞에서 구현했던 dot_product 함수(아이템 94 “언제, 왜 파이썬을 다른 프로그래밍 언어로 대체할지 알아두라” 참조)를 구현하되, C 확장 모듈로 작성한다. 우선 확장이 제공할 C 함수를 선언한다.
/* my_extension.h */
#define PY_SSIZE_T_CLEAN
#include <Python.h>
PyObject *dot_product(PyObject *self, PyObject *args);
그 후 함수를 C로 구현한다. 입출력을 인터페이스하기 위해 사용하는 파이썬 API(예 PyList_Size, PyFloat_FromDouble)는 매우 방대하고 지속적으로 발전하고 있고, 다행히 공식 문서(https://docs.python.org/3/extending)에 잘 문서화되어 있다. 이 버전의 함수는 2개의 크기가 같은 부동소수점 수 리스트를 입력으로 받고, 하나의 부동소수점 수를 반환한다.