Chapter 15. C Extensions
This chapter looks at the problem of accessing C code from Python. Many of Pythonâs built-in libraries are written in C, and accessing C is an important part of making Python talk to existing libraries. Itâs also an area that might require the most study if youâre faced with the problem of porting extension code from Python 2 to 3.
Although Python provides an extensive C programming API, there are actually many different approaches for dealing with C. Rather than trying to give an exhaustive reference for every possible tool or technique, the approach is to focus on a small fragment of C code along with some representative examples of how to work with the code. The goal is to provide a series of programming templates that experienced programmers can expand upon for their own use.
Here is the C code we will work with in most of the recipes:
/* sample.c */
#include <math.h>
/* Compute the greatest common divisor */
int
gcd
(
int
x
,
int
y
)
{
int
g
=
y
;
while
(
x
>
0
)
{
g
=
x
;
x
=
y
%
x
;
y
=
g
;
}
return
g
;
}
/* Test if (x0,y0) is in the Mandelbrot set or not */
int
in_mandel
(
double
x0
,
double
y0
,
int
n
)
{
double
x
=
0
,
y
=
0
,
xtemp
;
while
(
n
>
0
)
{
xtemp
=
x
*
x
-
y
*
y
+
x0
;
y
=
2
*
x
*
y
+
y0
;
x
=
xtemp
;
n
-=
1
;
if
(
x
*
x
+
y
*
y
>
4
)
return
0
;
}
return
1
;
}
/* Divide two numbers */
int
divide
(
int
a
,
int
b
,
int
*
remainder
)
{
int
quot
=
a
/
b
;
*
remainder
=
a
%
b
;
return
quot
;
}
/* Average values in an array */
double
avg
(
double
*
a
,
int
n
)
{
int
i
;
double
total
=
0.0
;
for
Get Python Cookbook, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.