Python/C API

Материал из Викиучебника

Перейти к: навигация, поиск

Стандартные модули 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)

[править] Источники