The Very High Level Layer

本章中的函数将允许您执行文件或缓冲区中给出的Python源代码,但它们不会让您以更详细的方式与解释器进行交互。

其中几个函数接受语法的开始符号作为参数。可用的开始符号是Py_eval_inputPy_file_inputPy_single_input这些在接受它们作为参数的功能之后描述。

还请注意,其中的几个函数采用FILE*参数。需要仔细处理的一个特定问题是不同C库的FILE结构可能不同并且不兼容。在Windows下(至少),动态链接的扩展实际上可能使用不同的库,所以应该小心,FILE*参数只有传递给这些函数,如果它确定它们被创建由Python运行时使用的库。

int Py_Main(int argc, wchar_t **argv)

标准解释器的主程序。这适用于嵌入Python的程序。argcargv参数应该准确地传递给C程序的main()函数用户的区域设置)。重要的是注意参数列表可以被修改(但是参数列表指向的字符串的内容不是)。The return value will be 0 if the interpreter exits normally (i.e., without an exception), 1 if the interpreter exits due to an exception, or 2 if the parameter list does not represent a valid Python command line.

请注意,如果提交了未处理的SystemExit,此函数将不返回1,而是退出该过程,只要Py_InspectFlag

int PyRun_AnyFile(FILE *fp, const char *filename)

这是以下PyRun_AnyFileExFlags()的简化界面,将closeit设置为0标志设置为 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()的简化接口,将标志参数设置为NULL

int PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit, PyCompilerFlags *flags)

如果fp指与交互设备(控制台或终端输入或Unix伪终端)关联的文件,则返回PyRun_InteractiveLoop()的值,否则返回结果PyRun_SimpleFile()filename是从文件系统编码(sys.getfilesystemencoding())解码的。如果filenameNULL,则此函数使用"???"作为文件名。

int PyRun_SimpleString(const char *command)

这是下面PyRun_SimpleStringFlags()的简化接口,将PyCompilerFlags *参数设置为NULL。

int PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)

根据flags参数在__main__模块中从命令执行Python源代码。如果__main__不存在,则创建它。如果发生异常,则返回成功时的0-1如果出现错误,则无法获取异常信息。关于标志的含义,请参见下文。

请注意,如果提交了未处理的SystemExit,此函数将不返回-1,而是退出该过程,只要Py_InspectFlag组。

int PyRun_SimpleFile(FILE *fp, const char *filename)

这是以下PyRun_SimpleFileExFlags()的简化界面,将closeit设置为0标志设置为 NULL

int PyRun_SimpleFileEx(FILE *fp, const char *filename, int closeit)

这是以下PyRun_SimpleFileExFlags()的简化接口,将标志设置为NULL

int PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, PyCompilerFlags *flags)

类似于PyRun_SimpleStringFlags(),但是Python源代码是从fp读取的,而不是内存中的字符串。filename应该是文件的名称,它是从文件系统编码(sys.getfilesystemencoding())解码的。如果closeit为true,则在PyRun_SimpleFileExFlags返回之前关闭文件。

int PyRun_InteractiveOne(FILE *fp, const char *filename)

这是以下PyRun_InteractiveOneFlags()的简化接口,将标志设置为NULL

int PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)

根据flags参数从与交互式设备关联的文件读取并执行单个语句。将使用sys.ps1sys.ps2提示用户。filename是从文件系统编码(sys.getfilesystemencoding())解码的。

当输入成功执行时,返回0,如果存在异常或errcode.h中的错误代码-1作为Python的一部分,如果有一个解析错误。(请注意,Python.h不包括errcode.h,因此如果需要,必须具体包含)。

int PyRun_InteractiveLoop(FILE *fp, const char *filename)

这是以下PyRun_InteractiveLoopFlags()的简化接口,将标志设置为NULL

int PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)

从与交互式设备相关联的文件读取和执行语句,直到到达EOF。将使用sys.ps1sys.ps2提示用户。filename是从文件系统编码(sys.getfilesystemencoding())解码的。在EOF返回0

int (*PyOS_InputHook)(void)

可以设置为指向原型int func(void)的函数。当Python的解释器提示即将变为空闲并等待来自终端的用户输入时,该函数将被调用。返回值被忽略。覆盖此钩子可用于将解释器的提示与其他事件循环集成,如Python源代码中的Modules/_tkinter.c中所做。

char* (*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, const char *)

可以设置为指向原型char * func(FILE * stdin, FILE t4 > * stdout, char *提示符),覆盖用于在解释器读取单行输入的默认函数的提示。如果函数不是NULL,则希望输出字符串提示符,然后从提供的标准输入文件读取一行输入,返回结果字符串。例如,readline模块设置此挂接以提供线路编辑和制表符完成功能。

如果发生错误,结果必须是由PyMem_RawMalloc()PyMem_RawRealloc()NULL分配的字符串。

在版本3.4中更改:结果必须由PyMem_RawMalloc()PyMem_RawRealloc()分配,而不是由PyMem_Malloc()PyMem_Realloc()

struct _node* PyParser_SimpleParseString(const char *str, int start)

这是以下PyParser_SimpleParseStringFlagsFilename()的简化界面,将filename设置为NULL标志设置为0

struct _node* PyParser_SimpleParseStringFlags(const char *str, int start, int flags)

这是以下PyParser_SimpleParseStringFlagsFilename()的简化接口,将filename设置为NULL

struct _node* PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename, int start, int flags)

根据flags参数使用起始标记start解析str的Python源代码。结果可以用于创建可以有效计算的代码对象。如果代码片段必须多次计算,这是有用的。filename是从文件系统编码(sys.getfilesystemencoding())解码的。

struct _node* PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)

这是以下PyParser_SimpleParseFileFlags()的简化界面,将标记设置为0

struct _node* PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)

类似于PyParser_SimpleParseStringFlagsFilename(),但Python源代码是从fp读取的,而不是内存中的字符串。

PyObject* PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals)
返回值:新引用。

这是到PyRun_StringFlags()的简化接口,将标志设置为NULL

PyObject* PyRun_StringFlags(const char *str, int start, PyObject *globals, PyObject *locals, PyCompilerFlags *flags)
返回值:新引用。

使用由标志指定的编译器标志全局局部指定的上下文中从str执行Python源代码 t3 >。全局必须是字典; locals可以是实现映射协议的任何对象。参数start指定应用于解析源代码的开始令牌。

返回以Python对象执行代码的结果,如果引发异常,则返回NULL

PyObject* PyRun_File(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals)
返回值:新引用。

这是以下PyRun_FileExFlags()的简化界面,将closeit设置为0标志设置为 NULL

PyObject* PyRun_FileEx(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, int closeit)
返回值:新引用。

这是下面PyRun_FileExFlags()的简化接口,将标志设置为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应该是文件的名称,它是从文件系统编码(sys.getfilesystemencoding())解码的。如果closeit为真,则文件在PyRun_FileExFlags()返回之前关闭。

PyObject* Py_CompileString(const char *str, const char *filename, int start)
返回值:新引用。

这是下面Py_CompileStringFlags()的简化接口,将标志设置为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)

str中解析并编译Python源代码,返回生成的代码对象。起始令牌由start;这可以用于约束可以编译的代码,应为Py_eval_inputPy_file_inputPy_single_inputfilename指定的文件名用于构造代码对象,并可能出现在traceback或SyntaxError异常消息中。如果无法解析或编译代码,则返回NULL

整数optimize指定编译器的优化级别;值-1选择由-O选项给出的解释器的优化级别。显式级别为0(无优化; __debug__为真),1(声明被删除,__debug__ )或2(docstrings也被删除)。

版本3.4中的新功能。

PyObject* Py_CompileStringExFlags(const char *str, const char *filename, int start, PyCompilerFlags *flags, int optimize)

Py_CompileStringExFlags(),但filename是从文件系统编码(os.fsdecode())解码的字节字符串。

版本3.2中的新功能。

PyObject* PyEval_EvalCode(PyObject *co, PyObject *globals, PyObject *locals)
返回值:新引用。

这是PyEval_EvalCodeEx()的简化接口,只有代码对象,全局变量和局部变量。其他参数设置为NULL

PyObject* PyEval_EvalCodeEx(PyObject *co, PyObject *globals, PyObject *locals, PyObject **args, int argcount, PyObject **kws, int kwcount, PyObject **defs, int defcount, PyObject *closure)

计算预编译的代码对象,给定特定的环境进行评估。这个环境包括全局变量的字典,局部变量的映射对象,参数数组,关键字和默认值,以及单元格的闭包元组。

PyFrameObject

用于描述框架对象的对象的C结构。此类型的字段可随时更改。

PyObject* PyEval_EvalFrame(PyFrameObject *f)

计算执行帧。这是到PyEval_EvalFrameEx()的简化接口,用于向后兼容。

PyObject* PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)

这是Python解释的主要,未被抛弃的函数。它字面上2000行长。执行与执行帧f相关联的代码对象,解释字节码并根据需要执行调用。附加的throwflag参数通常可以忽略 - 如果为true,则会立即抛出异常;这用于生成器对象的throw()方法。

在版本3.4中更改:此函数现在包括调试断言,以帮助确保它不会静默丢弃活动异常。

int PyEval_MergeCompilerFlags(PyCompilerFlags *cf)

此函数更改当前评估帧的标志,并在成功时返回true,在失败时返回false。

int Py_eval_input

单独表达式的Python语法的开始符号;用于Py_CompileString()

int Py_file_input

来自Python语法的开始符号,用于从文件或其他源读取的语句序列;用于Py_CompileString()这是在编译任意长的Python源代码时使用的符号。

int Py_single_input

单个语句的Python语法的开始符号;用于Py_CompileString()这是用于交互式解释器循环的符号。

struct PyCompilerFlags

这是用于保存编译器标志的结构。在只编译代码的情况下,它作为int flags传递;在代码执行的情况下, PyCompilerFlags * flags在这种情况下, __未来__ 导入可以修改标志

每当PyCompilerFlags * flagsNULLcf_flags被视为等于0,并且由于来自 __ future __ import引起的任何修改被丢弃。

struct PyCompilerFlags {
    int cf_flags;
}
int CO_FUTURE_DIVISION

This bit can be set in flags to cause division operator / to be interpreted as “true division” according to PEP 238.