Difference between revisions 73386 and 95783 on ruwikibooks

{{Python/DocPart}}

Стандартные модули [[Python]] расширяются за счет модулей расширения (extension modules).

Модули расширения пишут на языке [[C]] или [[C++]] и вызывают из программ на Python.

Все функции и макроопределения, которым необходим Python/C API должны предваряться включением заголовочного файла Python.h
<source lang="C">
#include "Python.h"
</source>

== Возможности ==

Через C API доступны все встроенные возможности языка Python:

* высокоуровневый интерфейс интерпретатора
* функции для работы со встроенным интерпретатором и потоками
* управление подсчетом ссылок. Требуется при создании или удалении Python-объектов в C/C++-коде.
* обработка исключений
* управление процессом и сервисы операционной системы
* импорт модулей
* поддержка сериализации объектов
* поддержка анализа строки аргументов. С помощью этих функций облегчается задача получения в коде на C параметров, заданных при вызове функции из Python.
* поддержка протоколов абстрактных объектов:
** Протокол объекта. То, что должен уметь делать любой объект Python
** Протокол числа. То, что должен делать любой объект, представляющий число
** Протокол последовательности
** Протокол отображения (например, словарь является отображением)
** Протокол итератора
** Протокол буфера. поддержка встроенных типов данных. Аналогично описанному в предыдущем пункте, но уже для конкретных встроенных типов данных.
* управление памятью (то есть кучей интерпретатора Python). Разумеется, можно применять и средства выделения памяти C/C++, однако, в этом случае не будут использоваться преимущества управления памятью интерпретатора Python. Кроме того, освобождение памяти нужно производить тем же способом, что и ее выделение.
* структуры для определения объектов встроенных типов

== Высокоуровневый интерфейс интерпретатора ==
<source lang="C">
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


</source>

== Управление подсчётом ссылок ==

<source lang="C">
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)

</source>

== Источники ==

* [http://www.intuit.ru/department/pl/python/13/1.html Использование Python С/C++ API]

[[Категория:Python|C API]]{{BookCat}}