# CAPI

# 概述

CPython 是用 C 写成的,对外提供了 C API ,让用户可以从 C 环境中与其交互。 C API 分为两类: 泛型 API 以及 特型 API

# 泛型API

泛型 API 与类型无关,属于 抽象对象层 ( Abstract Object Layer ),简称 AOL 。 这类 API 参数是 PyObject*​ ,可处理任意类型的对象, API 内部根据对象类型区别处理。

例如print函数:

int PyObject_Print(PyObject *op, FILE *fp, int flags)

# 特型API

特型 API 与类型相关,属于 具体对象层 ( Concrete Object Layer ),简称 COL 。 这类 API 只能作用于某种类型的对象,例如浮点对象 PyFloatObject 。

Python 内部为每一种内置对象提供了这样一组 API ,例如:

PyObject * PyFloat_FromDouble(double fval)