Revision 73386 of "Python/C API" on ruwikibooksСтандартные модули [[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]]All content in the above text box is licensed under the Creative Commons Attribution-ShareAlike license Version 4 and was originally sourced from https://ru.wikibooks.org/w/index.php?oldid=73386.
![]() ![]() This site is not affiliated with or endorsed in any way by the Wikimedia Foundation or any of its affiliates. In fact, we fucking despise them.
|