Документация Python неофициальный перевод

veryhigh.md

198 строк · 21.0 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/2.7/c-api/veryhigh.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Слой очень высокого уровня89Функции этой главы позволяют выполнять исходный код Python, переданный в файле или буфере, но не дают возможности взаимодействовать с интерпретатором на более детальном уровне.1011Некоторые из этих функций принимают начальный символ из грамматики в качестве параметра. Доступные начальные символы: `Py_eval_input`, `Py_file_input` и `Py_single_input`. Они описаны после функций, которые принимают их в качестве параметров.1213Обратите также внимание, что некоторые из этих функций принимают параметры `FILE*`. Одна из проблем, требующих особой осторожности, заключается в том, что структура `FILE` для разных C-библиотек может быть разной и несовместимой. В Windows (по крайней мере) динамически связанные расширения могут использовать разные библиотеки, поэтому следует быть внимательным и передавать параметры `FILE*` этим функциям только в том случае, если есть уверенность, что они созданы той же библиотекой, которую использует среда выполнения Python.1415#### `int Py_Main(int argc, char **argv)`1617Главная программа стандартного интерпретатора. Она доступна для программ, встраивающих Python. Параметры *argc* и *argv* должны быть подготовлены точно так же, как те, что передаются функции `main()` программы на C. Важно отметить, что список аргументов может быть изменён (однако содержимое строк, на которые указывают элементы списка аргументов, не изменяется). Возвращаемое значение будет равно `0`, если интерпретатор завершился нормально (т.е. без исключения), `1` – если из-за исключения, или `2` если список параметров не представляет собой допустимую командную строку Python.1819Обратите внимание: если возникло необрабатываемое иначе исключение [`SystemExit`](https://python-all.ru/2.7/library/exceptions.html#exceptions.SystemExit), эта функция не возвращает `1`, а завершает процесс, при условии, что `Py_InspectFlag` не установлен.2021#### `int PyRun_AnyFile(FILE *fp, const char *filename)`2223Это упрощённый интерфейс к [`PyRun_AnyFileExFlags()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyRun_AnyFileExFlags) (см. ниже), который оставляет *closeit* установленным в `0`, а *flags* – в *NULL*.2425#### `int PyRun_AnyFileFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)`2627Это упрощённый интерфейс к [`PyRun_AnyFileExFlags()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyRun_AnyFileExFlags) (см. ниже); аргумент *closeit* оставлен равным `0`.2829#### `int PyRun_AnyFileEx(FILE *fp, const char *filename, int closeit)`3031Это упрощённый интерфейс к [`PyRun_AnyFileExFlags()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyRun_AnyFileExFlags) ниже; аргумент *flags* устанавливается в *NULL*.3233#### `int PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit, PyCompilerFlags *flags)`3435Если *fp* ссылается на файл, связанный с интерактивным устройством (консоль, терминальный ввод или псевдотерминал Unix), возвращает значение [`PyRun_InteractiveLoop()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyRun_InteractiveLoop), в противном случае – результат [`PyRun_SimpleFile()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyRun_SimpleFile). Если *filename* равно *NULL*, эта функция использует `"???"` в качестве имени файла.3637#### `int PyRun_SimpleString(const char *command)`3839Это упрощённый интерфейс к [`PyRun_SimpleStringFlags()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyRun_SimpleStringFlags) ниже; аргумент *PyCompilerFlags\** устанавливается в NULL.4041#### `int PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)`4243Выполняет исходный код Python из *command* в модуле [`__main__`](https://python-all.ru/2.7/library/__main__.html#module-__main__) в соответствии с аргументом *flags*. Если [`__main__`](https://python-all.ru/2.7/library/__main__.html#module-__main__) не существует, он создаётся. Возвращает `0` при успехе или `-1`, если было возбуждено исключение. В случае ошибки получить информацию об исключении невозможно. Значение *flags* описано ниже.4445Обратите внимание: если возникло необрабатываемое иначе исключение [`SystemExit`](https://python-all.ru/2.7/library/exceptions.html#exceptions.SystemExit), эта функция не возвращает `-1`, а завершает процесс, при условии, что `Py_InspectFlag` не установлен.4647#### `int PyRun_SimpleFile(FILE *fp, const char *filename)`4849Это упрощённый интерфейс к [`PyRun_SimpleFileExFlags()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyRun_SimpleFileExFlags) ниже; *closeit* устанавливается в `0`, а *flags* – в *NULL*.5051#### `int PyRun_SimpleFileFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)`5253Это упрощённый интерфейс к [`PyRun_SimpleFileExFlags()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyRun_SimpleFileExFlags) ниже, при этом *closeit* остаётся равным `0`.5455#### `int PyRun_SimpleFileEx(FILE *fp, const char *filename, int closeit)`5657Это упрощённый интерфейс к [`PyRun_SimpleFileExFlags()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyRun_SimpleFileExFlags) ниже; *flags* устанавливается в *NULL*.5859#### `int PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, PyCompilerFlags *flags)`6061Аналогично [`PyRun_SimpleStringFlags()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyRun_SimpleStringFlags), но исходный код Python читается из *fp*, а не из строки в памяти. *filename* должно быть именем файла. Если *closeit* истинно, файл закрывается перед возвратом из PyRun\_SimpleFileExFlags.6263#### `int PyRun_InteractiveOne(FILE *fp, const char *filename)`6465Это упрощённый интерфейс к [`PyRun_InteractiveOneFlags()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyRun_InteractiveOneFlags) ниже; *flags* устанавливается в *NULL*.6667#### `int PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)`6869Читает и выполняет один оператор из файла, связанного с интерактивным устройством, в соответствии с аргументом *flags*. Пользователю будет предложен ввод с помощью `sys.ps1` и `sys.ps2`. Возвращает `0`, если ввод был выполнен успешно, `-1` – если возникло исключение, или код ошибки из включаемого файла `errcode.h`, распространяемого в составе Python, если произошла ошибка разбора. (Обратите внимание, что `errcode.h` не включается через `Python.h`, поэтому его нужно включить отдельно, если необходимо.)7071#### `int PyRun_InteractiveLoop(FILE *fp, const char *filename)`7273Это упрощённый интерфейс к [`PyRun_InteractiveLoopFlags()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyRun_InteractiveLoopFlags) ниже; *flags* устанавливается в *NULL*.7475#### `int PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)`7677Читает и выполняет операторы из файла, связанного с интерактивным устройством, до достижения EOF. Пользователю будет предложен ввод с помощью `sys.ps1` и `sys.ps2`. Возвращает `0` при EOF.7879#### `struct _node* PyParser_SimpleParseString(const char *str, int start)`8081Это упрощённый интерфейс к [`PyParser_SimpleParseStringFlagsFilename()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyParser_SimpleParseStringFlagsFilename) ниже; *filename* устанавливается в *NULL*, а *flags* – в `0`.8283#### `struct _node* PyParser_SimpleParseStringFlags(const char *str, int start, int flags)`8485Это упрощённый интерфейс к [`PyParser_SimpleParseStringFlagsFilename()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyParser_SimpleParseStringFlagsFilename) ниже; *filename* устанавливается в *NULL*.8687#### `struct _node* PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename, int start, int flags)`8889Анализирует исходный код Python из *str*, используя начальный токен *start* в соответствии с аргументом *flags*. Результат можно использовать для создания объекта кода, который может быть эффективно вычислен. Это полезно, если фрагмент кода должен вычисляться много раз.9091#### `struct _node* PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)`9293Это упрощённый интерфейс к [`PyParser_SimpleParseFileFlags()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyParser_SimpleParseFileFlags) (см. ниже), в котором параметр *flags* установлен в `0`.9495#### `struct _node* PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)`9697Похоже на [`PyParser_SimpleParseStringFlagsFilename()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyParser_SimpleParseStringFlagsFilename), но исходный код Python читается из *fp* вместо строки в памяти.9899#### `PyObject* PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals)`100101*Возвращаемое значение: новая ссылка.*102103Это упрощённый интерфейс к [`PyRun_StringFlags()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyRun_StringFlags) (см. ниже), оставляющий *flags* установленным в *NULL*.104105#### `PyObject* PyRun_StringFlags(const char *str, int start, PyObject *globals, PyObject *locals, PyCompilerFlags *flags)`106107*Возвращаемое значение: новая ссылка.*108109Выполняет исходный код Python из *str* в контексте, заданном словарями *globals* и *locals*, с флагами компилятора, указанными в *flags*. Параметр *start* задаёт начальный токен, который следует использовать для разбора исходного кода.110111Возвращает результат выполнения кода в виде объекта Python или *NULL*, если возникло исключение.112113#### `PyObject* PyRun_File(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals)`114115*Возвращаемое значение: новая ссылка.*116117Это упрощённый интерфейс к [`PyRun_FileExFlags()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyRun_FileExFlags) (см. ниже), который оставляет *closeit* установленным в `0`, а *flags* – в *NULL*.118119#### `PyObject* PyRun_FileEx(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, int closeit)`120121*Возвращаемое значение: новая ссылка.*122123Это упрощённый интерфейс к [`PyRun_FileExFlags()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyRun_FileExFlags) (см. ниже), оставляющий *flags* установленным в *NULL*.124125#### `PyObject* PyRun_FileFlags(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, PyCompilerFlags *flags)`126127*Возвращаемое значение: новая ссылка.*128129Это упрощённый интерфейс к [`PyRun_FileExFlags()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyRun_FileExFlags) (см. ниже), в котором параметр *closeit* установлен в `0`.130131#### `PyObject* PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, int closeit, PyCompilerFlags *flags)`132133*Возвращаемое значение: новая ссылка.*134135Аналогично [`PyRun_StringFlags()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyRun_StringFlags), но исходный код Python читается из *fp*, а не из строки в памяти. *filename* должно быть именем файла. Если *closeit* истинно, файл закрывается перед возвратом [`PyRun_FileExFlags()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyRun_FileExFlags).136137#### `PyObject* Py_CompileString(const char *str, const char *filename, int start)`138139*Возвращаемое значение: новая ссылка.*140141Это упрощённый интерфейс к [`Py_CompileStringFlags()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.Py_CompileStringFlags) (см. ниже), оставляющий *flags* установленным в *NULL*.142143#### `PyObject* Py_CompileStringFlags(const char *str, const char *filename, int start, PyCompilerFlags *flags)`144145*Возвращаемое значение: новая ссылка.*146147Разбирает и компилирует исходный код Python из *str*, возвращая результирующий объект кода. Начальный токен задаётся *start*; его можно использовать для ограничения компилируемого кода; он должен быть равен `Py_eval_input`, `Py_file_input` или `Py_single_input`. Имя файла, указанное *filename*, используется для построения объекта кода и может появляться в трассировках или [`SyntaxError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.SyntaxError) сообщениях об исключениях. Возвращает *NULL*, если код не удалось разобрать или скомпилировать.148149#### `PyObject* PyEval_EvalCode(PyCodeObject *co, PyObject *globals, PyObject *locals)`150151*Возвращаемое значение: новая ссылка.*152153Это упрощённый интерфейс к [`PyEval_EvalCodeEx()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.PyEval_EvalCodeEx), содержащий только объект кода, и словари глобальных и локальных переменных. Остальные аргументы устанавливаются в *NULL*.154155#### `PyObject* PyEval_EvalCodeEx(PyCodeObject *co, PyObject *globals, PyObject *locals, PyObject **args, int argcount, PyObject **kws, int kwcount, PyObject **defs, int defcount, PyObject *closure)`156157Выполняет предварительно скомпилированный объект кода в заданном окружении. Это окружение состоит из словарей глобальных и локальных переменных, массивов аргументов, ключевых слов и значений по умолчанию, а также кортежа замыкания с ячейками.158159#### `PyObject* PyEval_EvalFrame(PyFrameObject *f)`160161Выполняет фрейм исполнения. Это упрощённый интерфейс к PyEval\_EvalFrameEx для обратной совместимости.162163#### `PyObject* PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)`164165Это основная, неприукрашенная функция интерпретации Python. Она буквально насчитывает 2000 строк. Код объекта *f*, связанный с фреймом выполнения, выполняется: интерпретируются байткод и по мере необходимости выполняются вызовы. Дополнительный параметр *throwflag* в основном можно игнорировать – если он истинный, то немедленно выбрасывается исключение; это используется для методов [`throw()`](https://python-all.ru/2.7/reference/expressions.html#generator.throw) объектов-генераторов.166167#### `int PyEval_MergeCompilerFlags(PyCompilerFlags *cf)`168169Эта функция изменяет флаги текущего фрейма вычислений и возвращает true в случае успеха, false в случае ошибки.170171**int `Py_eval_input`**172173Стартовый символ из грамматики Python для изолированных выражений; используется с [`Py_CompileString()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.Py_CompileString).174175**int `Py_file_input`**176177Стартовый символ из грамматики Python для последовательностей операторов, читаемых из файла или другого источника; используется с [`Py_CompileString()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.Py_CompileString). Это символ, который следует использовать при компиляции произвольно длинного исходного кода Python.178179**int `Py_single_input`**180181Начальный символ грамматики Python для одного оператора; используется с [`Py_CompileString()`](https://python-all.ru/2.7/c-api/veryhigh.html#c.Py_CompileString). Этот символ используется в интерактивном цикле интерпретатора.182183**struct `PyCompilerFlags`**184185Это структура, используемая для хранения флагов компилятора. Если код только компилируется, она передаётся как `int flags`, а если код выполняется, она передаётся как `PyCompilerFlags *flags`. В этом случае `from __future__ import` может изменять *flags*.186187Если `PyCompilerFlags *flags` равно *NULL*, то `cf_flags` считается равным `0`, а все изменения, связанные с `from __future__ import`, отбрасываются.188189```c190struct PyCompilerFlags {191    int cf_flags;192}193```194195**int `CO_FUTURE_DIVISION`**196197Этот бит можно установить в *flags*, чтобы оператор деления `/` интерпретировался как «истинное деление» в соответствии с [**PEP 238**](https://python-all.ru/2.7/c-api/veryhigh.html).198