Содержание страницы
Слой очень высокого уровня¶The Very High Level Layer
Функции этой главы позволяют выполнять исходный код Python, переданный в файле или буфере, но не дают возможности взаимодействовать с интерпретатором на более детальном уровне.
Некоторые из этих функций принимают начальный символ грамматики в качестве параметра. Доступны следующие начальные символы: Py_eval_input, Py_file_input, Py_single_input и Py_func_type_input. Они описаны после функций, которые принимают их как параметры.
Обратите также внимание, что некоторые из этих функций принимают параметры FILE*. Одна из частных проблем, требующая аккуратного подхода, заключается в том, что структура FILE для разных библиотек C может различаться и быть несовместимой. По крайней мере, под Windows динамически подключаемые расширения могут использовать разные библиотеки, поэтому следует проявлять осторожность: параметры FILE* следует передавать этим функциям только в том случае, если есть уверенность, что они созданы той же библиотекой, которую использует среда выполнения Python.
-
int PyRun_AnyFile(FILE *fp, const char *filename)¶
Это упрощённый интерфейс к
PyRun_AnyFileExFlags()(см. ниже); closeit оставлен равным0, а flags –NULL.
-
int PyRun_AnyFileFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)¶
Это упрощённый интерфейс к
PyRun_AnyFileExFlags()(см. ниже); аргумент closeit оставлен равным0.
-
int PyRun_AnyFileEx(FILE *fp, const char *filename, int closeit)¶
Это упрощённый интерфейс к
PyRun_AnyFileExFlags()(см. ниже); аргумент flags оставлен равнымNULL.
-
int PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit, PyCompilerFlags *flags)¶
Если fp ссылается на файл, связанный с интерактивным устройством (консоль, терминальный ввод или Unix-псевдотерминал), возвращается значение
PyRun_InteractiveLoop(); в противном случае возвращается результатPyRun_SimpleFile(). filename декодируется из кодировки файловой системы (sys.getfilesystemencoding()). Если filename равноNULL, эта функция использует"???"в качестве имени файла. Если closeit истинно, файл закрывается до возвратаPyRun_SimpleFileExFlags().
-
int PyRun_SimpleString(const char *command)¶
Это упрощённый интерфейс к
PyRun_SimpleStringFlags()(см. ниже); аргументPyCompilerFlags* оставлен равнымNULL.
-
int PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)¶
Выполняет исходный код Python из command в модуле
__main__в соответствии с аргументом flags. Если__main__не существует, он создаётся. Возвращает0при успехе или-1, если было возбуждено исключение. В случае ошибки получить информацию об исключении невозможно. Значение flags описано ниже.Обратите внимание: если возбуждается
SystemExit, которое иначе не было бы обработано, эта функция не вернёт-1, а завершит процесс, при условии, чтоPyConfig.inspectравно нулю.
-
int PyRun_SimpleFile(FILE *fp, const char *filename)¶
Это упрощённый интерфейс к
PyRun_SimpleFileExFlags()(см. ниже); closeit оставлен равным0, а flags –NULL.
-
int PyRun_SimpleFileEx(FILE *fp, const char *filename, int closeit)¶
Это упрощённый интерфейс к
PyRun_SimpleFileExFlags()(см. ниже); flags оставлен равнымNULL.
-
int PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, PyCompilerFlags *flags)¶
Аналогично
PyRun_SimpleStringFlags(), но исходный код Python читается из fp, а не из строки в памяти. filename должно быть именем файла; оно декодируется из кодировки файловой системы и обработчика ошибок. Если closeit истинно, файл закрывается до возвратаPyRun_SimpleFileExFlags().Примечание
В Windows fp должен быть открыт в бинарном режиме (например,
fopen(filename, "rb")). В противном случае Python может некорректно обрабатывать файлы скриптов с концами строк LF.
-
int PyRun_InteractiveOneObject(FILE *fp, PyObject *filename, PyCompilerFlags *flags)¶
Читает и выполняет один оператор из файла, связанного с интерактивным устройством, в соответствии с аргументом flags. Пользователю будет выведено приглашение с помощью
sys.ps1иsys.ps2. filename должен быть объектомstrPython.Возвращает
0при успешном выполнении ввода,-1при возникновении исключения или код ошибки из заголовочного файлаerrcode.h, распространяемого в составе Python, в случае ошибки синтаксического анализа. (Обратите внимание, чтоerrcode.hне включаетсяPython.h, поэтому при необходимости его нужно включать отдельно.)
-
int PyRun_InteractiveOne(FILE *fp, const char *filename)¶
Это упрощённый интерфейс к
PyRun_InteractiveOneFlags()(см. ниже); flags оставлен равнымNULL.
-
int PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)¶
Аналогично
PyRun_InteractiveOneObject(), но filename является const char*, которое декодируется из кодировки файловой системы и обработчика ошибок.
-
int PyRun_InteractiveLoop(FILE *fp, const char *filename)¶
Это упрощённый интерфейс к
PyRun_InteractiveLoopFlags()(см. ниже), в котором параметр flags установлен вNULL.
-
int PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)¶
Читает и выполняет инструкции из файла, связанного с интерактивным устройством, до достижения EOF. Пользователю выводится приглашение с помощью
sys.ps1иsys.ps2. filename декодируется из кодировки файловой системы и обработчика ошибок. Возвращает0при EOF или отрицательное число в случае ошибки.
-
int (*PyOS_InputHook)(void)¶
- Часть Stable ABI.
Может быть установлен на функцию с прототипом
int func(void). Эта функция будет вызываться, когда приглашение интерпретатора Python собирается перейти в состояние ожидания ввода пользователя с терминала. Возвращаемое значение игнорируется. Переопределение этого хука можно использовать для интеграции приглашения интерпретатора с другими циклами событий, как это сделано вModules/_tkinter.cв исходном коде Python.Изменено в версии 3.12: Эта функция вызывается только из основного интерпретатора.
-
char *(*PyOS_ReadlineFunctionPointer)(FILE*, FILE*, const char*)¶
Может быть установлен на функцию с прототипом
char *func(FILE *stdin, FILE *stdout, char *prompt), переопределяя стандартную функцию для чтения одной строки ввода в приглашении интерпретатора. Ожидается, что функция выведет строку prompt, если она неNULL, а затем прочитает строку ввода из предоставленного стандартного входного файла и вернёт полученную строку. Например, модульreadlineустанавливает этот хук для поддержки редактирования строки и автодополнения по табуляции.Результатом должна быть строка, выделенная с помощью
PyMem_RawMalloc()илиPyMem_RawRealloc(), илиNULL, если произошла ошибка.Изменено в версии 3.4: Результат должен выделяться с помощью
PyMem_RawMalloc()илиPyMem_RawRealloc(), а не с помощьюPyMem_Malloc()илиPyMem_Realloc().Изменено в версии 3.12: Эта функция вызывается только из основного интерпретатора.
-
PyObject *PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals)¶
- Возвращаемое значение: новая ссылка.
Это упрощённый интерфейс к
PyRun_StringFlags()(см. ниже), в котором параметр flags установлен вNULL.
-
PyObject *PyRun_StringFlags(const char *str, int start, PyObject *globals, PyObject *locals, PyCompilerFlags *flags)¶
- Возвращаемое значение: новая ссылка.
Выполняет исходный код Python из str в контексте, заданном объектами globals и locals, с флагами компилятора, указанными в flags. globals должен быть словарём; locals может быть любым объектом, реализующим протокол отображения. Параметр start задаёт начальный символ и должен быть одним из доступных начальных символов.
Возвращает результат выполнения кода в виде объекта Python, или
NULL, если было возбуждено исключение.
-
PyObject *PyRun_File(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals)¶
- Возвращаемое значение: новая ссылка.
Это упрощённый интерфейс к
PyRun_FileExFlags()(см. ниже), в котором параметр closeit установлен в0, а flags – вNULL.
-
PyObject *PyRun_FileEx(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, int closeit)¶
- Возвращаемое значение: новая ссылка.
Это упрощённый интерфейс к
PyRun_FileExFlags()(см. ниже), в котором параметр flags установлен вNULL.
-
PyObject *PyRun_FileFlags(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, PyCompilerFlags *flags)¶
- Возвращаемое значение: новая ссылка.
Это упрощённый интерфейс к
PyRun_FileExFlags()(см. ниже), в котором параметр closeit установлен в0.
-
PyObject *PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, int closeit, PyCompilerFlags *flags)¶
- Возвращаемое значение: новая ссылка.
Аналогично
PyRun_StringFlags(), но исходный код Python читается из fp, а не из строки в памяти. filename должен быть именем файла, он декодируется из кодировки файловой системы и обработчика ошибок. Если closeit истинно, файл закрывается перед возвратом изPyRun_FileExFlags().
-
PyObject *Py_CompileString(const char *str, const char *filename, int start)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Это упрощённый интерфейс к
Py_CompileStringFlags()(см. ниже), в котором параметр flags установлен вNULL.
-
PyObject *Py_CompileStringFlags(const char *str, const char *filename, int start, PyCompilerFlags *flags)¶
- Возвращаемое значение: новая ссылка.
Это упрощённый интерфейс к
Py_CompileStringExFlags()(см. ниже), в котором параметр optimize установлен в-1.
-
PyObject *Py_CompileStringObject(const char *str, PyObject *filename, int start, PyCompilerFlags *flags, int optimize)¶
- Возвращаемое значение: новая ссылка.
Анализирует и компилирует исходный код Python в str, возвращая результирующий объект кода. Начальный символ задаётся параметром start; это можно использовать для ограничения компилируемого кода, и он должен быть одним из доступных начальных символов. Имя файла, указанное в filename, используется для построения объекта кода и может появляться в трассировках стека или сообщениях об исключениях
SyntaxError. ВозвращаетNULL, если код не может быть разобран или скомпилирован.Целое число optimize задаёт уровень оптимизации компилятора; значение
-1выбирает уровень оптимизации интерпретатора, заданный опциями-O. Явные уровни:0(без оптимизации;__debug__истинно),1(утверждения удалены,__debug__ложно) или2(докстринги также удалены).Добавлено в версии 3.4.
-
PyObject *Py_CompileStringExFlags(const char *str, const char *filename, int start, PyCompilerFlags *flags, int optimize)¶
- Возвращаемое значение: новая ссылка.
Как
Py_CompileStringObject(), но filename – это байтовая строка, декодированная из кодировки файловой системы и обработчика ошибок.Добавлено в версии 3.2.
-
PyObject *PyEval_EvalCode(PyObject *co, PyObject *globals, PyObject *locals)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Это упрощённый интерфейс к
PyEval_EvalCodeEx(), содержащий только объект кода, а также глобальные и локальные переменные. Остальные аргументы устанавливаются вNULL.
-
PyObject *PyEval_EvalCodeEx(PyObject *co, PyObject *globals, PyObject *locals, PyObject *const *args, int argcount, PyObject *const *kws, int kwcount, PyObject *const *defs, int defcount, PyObject *kwdefs, PyObject *closure)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Выполняет предварительно скомпилированный объект кода в заданном окружении для его вычисления. Это окружение состоит из словаря глобальных переменных, объекта отображения локальных переменных, массивов аргументов, ключевых слов и значений по умолчанию, словаря значений по умолчанию для только ключевых аргументов и кортежа замыкания с ячейками.
-
PyObject *PyEval_EvalFrame(PyFrameObject *f)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Выполняет фрейм исполнения. Это упрощённый интерфейс к
PyEval_EvalFrameEx(), обеспечивающий обратную совместимость.
-
PyObject *PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Это основная, неприукрашенная функция интерпретации Python. Выполняется объект кода, связанный с фреймом исполнения f, с интерпретацией байткода и вызовом функций по мере необходимости. Дополнительный параметр throwflag в основном можно игнорировать – если он равен true, то немедленно возбуждается исключение; это используется для методов
throw()объектов-генераторов.Изменено в версии 3.4: Эта функция теперь включает отладочное утверждение, помогающее гарантировать, что она не игнорирует активное исключение без уведомления.
-
int PyEval_MergeCompilerFlags(PyCompilerFlags *cf)¶
Эта функция изменяет флаги текущего фрейма вычислений и возвращает true в случае успеха, false в случае ошибки.
-
struct PyCompilerFlags¶
Это структура, используемая для хранения флагов компилятора. Если код только компилируется, она передаётся как
int flags, а если код выполняется, она передаётся какPyCompilerFlags *flags. В этом случаеfrom __future__ importможет изменять flags.Когда
PyCompilerFlags *flagsравноNULL,cf_flagsрассматривается как равный0, и любые изменения, вызванныеfrom __future__ import, отбрасываются.-
int cf_flags¶
Флаги компилятора.
-
int cf_feature_version¶
cf_feature_version – это минорная версия Python. Его следует инициализировать значением
PY_MINOR_VERSION.Поле по умолчанию игнорируется; оно используется только если флаг
PyCF_ONLY_ASTустановлен вcf_flags.
Изменено в версии 3.8: Добавлено поле cf_feature_version.
Доступные флаги компилятора доступны в виде макросов:
-
PyCF_ALLOW_TOP_LEVEL_AWAIT¶
-
PyCF_ONLY_AST¶
-
PyCF_OPTIMIZED_AST¶
-
PyCF_TYPE_COMMENTS¶
См. флаги компилятора в документации модуля Python
ast, который экспортирует эти константы под теми же именами.
Флаги «
PyCF» выше можно комбинировать с флагами «CO_FUTURE», такими какCO_FUTURE_ANNOTATIONS, чтобы включить возможности, обычно выбираемые с помощью future-операторов. Полный список см. в Флаги объекта кода.-
int cf_flags¶
Доступные стартовые символы¶Available start symbols
-
int Py_eval_input¶
Стартовый символ из грамматики Python для изолированных выражений; используется с
Py_CompileString().
-
int Py_file_input¶
Стартовый символ из грамматики Python для последовательностей операторов, читаемых из файла или другого источника; используется с
Py_CompileString(). Это символ, который следует использовать при компиляции произвольно длинного исходного кода Python.
-
int Py_single_input¶
Начальный символ грамматики Python для одного оператора; используется с
Py_CompileString(). Этот символ используется в интерактивном цикле интерпретатора.
-
int Py_func_type_input¶
Начальный символ грамматики Python для типа функции; используется с
Py_CompileString(). Используется для разбора «комментариев с типом сигнатуры» из PEP 484.Для этого требуется установка флага
PyCF_ONLY_AST.См. также
Добавлено в версии 3.8.
Эффекты стека¶Stack Effects
См. также
-
PY_INVALID_STACK_EFFECT¶
Сторожевое значение, представляющее недопустимый эффект стека.
В настоящее время эквивалентно
INT_MAX.Добавлено в версии 3.8.
-
int PyCompile_OpcodeStackEffect(int opcode, int oparg)¶
Вычисляет эффект стека для opcode с аргументом oparg.
В случае успеха функция возвращает эффект стека; в случае неудачи возвращает
PY_INVALID_STACK_EFFECT.Добавлено в версии 3.4.
-
int PyCompile_OpcodeStackEffectWithJump(int opcode, int oparg, int jump)¶
Подобно
PyCompile_OpcodeStackEffect(), но не включает эффект стека от перехода, если jump равен нулю.Если jump равно
0, эффект стека от перехода не включается, но если jump равно1или-1, то включается.В случае успеха функция возвращает эффект стека; в случае неудачи возвращает
PY_INVALID_STACK_EFFECT.Добавлено в версии 3.8.