Python/C API
Материал из Викиучебника
< Python
Стандартные модули Python расширяются за счет модулей расширения (extension modules). Модули расширения пишут на языке C или C++ вызывают из программ на Python.
Все функции и макроопределения, которым необходим Python/C API должны предворяться включением заголовочного файла Python.h
#include "Python.h"
Содержание |
[править] Возможности
Через C API доступны все встроенные возможности языка Python:
- высокоуровневый интерфейс интерпретатора
- функции для работы со встроенным интерпретатором и потоками
- управление подсчетом ссылок. Требуется при создании или удалении Python-объектов в C/C++-коде.
- обработка исключений
- управление процессом и сервисы операционной системы
- импорт модулей
- поддержка сериализации объектов
- поддержка анализа строки аргументов. С помощью этих функций облегчается задача получения в коде на C параметров, заданных при вызове функции из Python.
- поддержка протоколов абстрактных объектов:
- Протокол объекта. То, что должен уметь делать любой объект Python
- Протокол числа. То, что должен делать любой объект, представляющий число
- Протокол последовательности
- Протокол отображения (например, словарь является отображением)
- Протокол итератора
- Протокол буфера. поддержка встроенных типов данных. Аналогично описанному в предыдущем пункте, но уже для конкретных встроенных типов данных.
- управление памятью (то есть кучей интерпретатора Python). Разумеется, можно применять и средства выделения памяти C/C++, однако, в этом случае не будут использоваться преимущества управления памятью интерпретатора Python. Кроме того, освобождение памяти нужно производить тем же способом, что и ее выделение.
- структуры для определения объектов встроенных типов
[править] Высокоуровневый Интерфейс Интерпретатора
int Py_Main(int argc, char **argv) // Главня процедура (скорее контекс выполнения) стандартного интерпертатора. // Это сделано для программ, которые вставляются Python. int PyRun_AnyFile(FILE *fp, const char *filename) int PyRun_AnyFileFlags(FILE *fp, const char *filename, PyCompilerFlags *flags) int PyRun_AnyFileEx(FILE *fp, const char *filename, int closeit) int PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit, PyCompilerFlags *flags) int PyRun_SimpleFile(FILE *fp, const char *filename) int PyRun_SimpleFileFlags(FILE *fp, const char *filename, PyCompilerFlags *flags) int PyRun_SimpleFileEx(FILE *fp, const char *filename, int closeit) int PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, PyCompilerFlags *flags) int PyRun_InteractiveOne(FILE *fp, const char *filename) int PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags) int PyRun_InteractiveLoop(FILE *fp, const char *filename) int PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags) struct _node* PyParser_SimpleParseString(const char *str, int start) struct _node* PyParser_SimpleParseStringFlags(const char *str, int start, int flags) struct _node* PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename, int start, int flags) struct _node* PyParser_SimpleParseFile(FILE *fp, const char *filename, int start) struct _node* PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags) PyObject* PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals) PyObject* PyRun_StringFlags(const char *str, int start, PyObject *globals, PyObject *locals, PyCompilerFlags *flags) PyObject* PyRun_File(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals) PyObject* PyRun_FileEx(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, int closeit) PyObject* PyRun_FileFlags(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, PyCompilerFlags *flags) PyObject* PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, int closeit, PyCompilerFlags *flags) PyObject* Py_CompileString(const char *str, const char *filename, int start) PyObject* Py_CompileStringFlags(const char *str, const char *filename, int start, PyCompilerFlags *flags) PyObject* PyEval_EvalCode(PyCodeObject *co, PyObject *globals, PyObject *locals) PyObject* PyEval_EvalCodeEx(PyCodeObject *co, PyObject *globals, PyObject *locals, PyObject **args, int argcount, PyObject **kws, int kwcount, PyObject **defs, int defcount, PyObject *closure) PyObject* PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) int Py_eval_input int Py_file_input int Py_single_input struct PyCompilerFlags struct PyCompilerFlags { int cf_flags; } int CO_FUTURE_DIVISION
[править] Управление подсчетом ссылок.
void Py_INCREF(PyObject *o) void Py_XINCREF(PyObject *o) void Py_DECREF(PyObject *o) void Py_XDECREF(PyObject *o) void Py_CLEAR(PyObject *o)