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}} 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?diff=prev&oldid=95783.
![]() ![]() 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.
|