超高层 – Python / C API参考手册(Python教程)(参考资料)
非常高级别的层
本章中的函数将允许您执行在文件或缓冲区中给出的Python源代码,但它们不会让您以更详细的方式与解释器进行交互.
其中一些函数接受语法中的起始符号作为参数。可用的起始符号是Py_eval_input
,Py_file_input
和Py_single_input
。这些是在接受它们作为参数的函数之后描述的.
还注意这几个函数中的几个接受FILE*
参数。需要仔细处理的一个特定问题是,不同C库的FILE
结构可能不同且不兼容。UnderWindows(至少),动态链接扩展可能实际使用不同的库,所以应该注意FILE*
参数只传递给这些函数,如果它确定它们是由与Python相同的库创建的运行时正在使用.
- int
Py_Main
( int argc,wchar_t **argv) - 标准口译员的主要程序。这适用于嵌入Python的程序。argc和argv参数应该与传递给C程序的
main()
函数(根据用户的语言环境转换为wchar_t)完全相同。重要的是要注意参数列表可能被修改(但参数列表指向的字符串的内容不是)。如果解释器正常退出(即没有例外),则返回值为0
,如果解释器因异常退出则返回1
,如果参数列表不退出则返回2
代表一个有效的Python命令行.注意如果引发了另一个未处理的
SystemExit
,这个函数将不会返回1
,但退出进程,只要Py_InspectFlag
没有设置
- 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
(文件 *fp,const char *filename,int closeit,PyCompilerFlags *flags) - 如果fp指的是与交互设备关联的文件(控制台或终端输入或Unix伪终端),返回
PyRun_InteractiveLoop()
的值,否则返回PyRun_SimpleFile()
. filename从filesystemencoding(sys.getfilesystemencoding()
)解码。如果filename是NULL,这个函数使用"???"
作为文件名.
- int
PyRun_SimpleString
( const char *command) - 这是
PyRun_SimpleStringFlags()
下面,将PyCompilerFlags*参数设置为NULL.
- int
PyRun_SimpleStringFlags
( const char *command,PyCompilerFlags *flags) - 根据command在
__main__
模块中执行flags论点。如果__main__
它已经存在,它已经创建了。成功时返回0
或者如果引发异常则返回-1
。如果出现错误,则无法获取异常信息。对于flags的说明,请参见下文.注意如果出现一个未处理的
SystemExit
,此函数将不会返回-1
,但是退出进程,只要Py_InspectFlag
没有设置
- 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应该是文件的名称,它是从文件系统编码(sys.getfilesystemencoding()
)解码的。如果closeit是的,文件是在PyRun_SimpleFileExFlags返回之前关闭的.
- int
PyRun_InteractiveOne
( FILE *fp,const char *filename) - 这是
PyRun_InteractiveOneFlags()
下面的简化界面,将flags设置为NULL.
- int
PyRun_InteractiveOneFlags
(文件 *fp,const char *filename,PyCompilerFlags *flags) - 根据flags参数从与交互设备关联的文件中读取并执行单个语句。用户将使用
sys.ps1
进行提示并且sys.ps2
. filename从文件系统编码解码(sys.getfilesystemencoding()
).返回
0
当输入成功执行时,-1
如果有异常,或者来自errcode.h
包含文件的错误代码作为Python的一部分分发,如果有解析错误的话。(注意errcode.h
不包括Python.h
,如果需要,必须特别包含。)
- int
PyRun_InteractiveLoop
(文件 *fp,const char *filename) - 这是
PyRun_InteractiveLoopFlags()
下面的简化界面,将flags设置为NULL.
- int
PyRun_InteractiveLoopFlags
( FILE *fp,const char *filename,PyCompilerFlags *flags) - 从与交互设备关联的文件中读取和执行语句,直到达到EOF。将使用
sys.ps1
提示用户,并且sys.ps2
. filename从文件系统编码(sys.getfilesystemencoding()
)解码。在EOF时返回0
或在失败时返回负数.
- int
(*PyOS_InputHook)
( void ) - 可以被设置为指向原型
int func(void)
的函数。当Python的解释器提示即将变为空闲并等待来自终端的用户输入时,将调用该函数。返回值被忽略。覆盖thishook可用于将解释器的提示与其他循环集成,如在@Python源代码中的Modules/_tkinter.c
中所做的那样
- char*
(*PyOS_ReadlineFunctionPointer)
(文件 *,文件 *,常量字符 *) - 可以设置为指向原型的函数
char *func(FILE *stdin, FILE *stdout, char *prompt)
,覆盖用于在解释器提示符下读取单行输入的默认函数。如果不是prompt,该功能有望输出字符串NULL,然后从提供的标准输入文件中读取一行输入,则返回结果字符串。例如,readline
模块setsthis钩子提供行编辑和标签完成功能.结果必须是
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和flags设置为0
.
- struct _node *
PyParser_SimpleParseStringFlags
( const char *str,int start,int flags) - 这是
PyParser_SimpleParseStringFlagsFilename()
的简化界面,留下filenamesetto NULL.
- struct _node *
PyParser_SimpleParseStringFlagsFilename
( const char *str,const char *filename,int start,int flags) - 根据str使用开始标记start从flags论点。结果可用于创建可以有效评估的代码对象。如果必须多次评估代码片段,这将非常有用。filename是从文件系统编码解码的(
sys.getfilesystemencoding()
).
- struct _node *
PyParser_SimpleParseFile
( FILE *fp,const char *filename,int start) - 这是
PyParser_SimpleParseFileFlags()
下面的简化界面,将flags设置为0
.
- struct _node *
PyParser_SimpleParseFileFlags
( FILE *fp,const char *filename,int start,int flags) - 类似于
PyParser_SimpleParseStringFlagsFilename()
,但Pythonsource代码是从fp而不是内存中的字符串中读取的.
- PyObject*
PyRun_String
( const char *str,int start,PyObject *globals,PyObject *locals) - Return value: New reference.
这是到
PyRun_StringFlags()
下面的简化界面,将flags设置为NULL.
- PyObject *
PyRun_StringFlags
( const char *str,int start,PyObject *globals,PyObject *locals,PyCompilerFlags *flags) - Return value: New reference.
执行str的Python源代码在对象globals和locals指定的上下文中,flags. globals指定的编译器标志必须是字典;locals可以是实现映射协议的任何对象。参数start指定应该用于解析源代码的开始标记.
返回执行代码作为Python对象的结果,或NULL如果引发了异常.
- PyObject*
PyRun_File
( FILE *fp,const char *filename,int start,PyObject *globals,PyObject *locals) - Return value: New reference.
这是
PyRun_FileExFlags()
下面的简化界面,将closeit设置为0
和flags设置为NULL.
- PyObject *
PyRun_FileEx
( FILE *fp,const char *filename,int start,PyObject *globals,PyObject *locals,int closeit) - Return value: New reference.
这是
PyRun_FileExFlags()
下面的简化界面,留下flags设置为NULL.
- PyObject *
PyRun_FileFlags
( FILE *fp,const char *filename,int start,PyObject *globals,PyObject *locals,PyCompilerFlags *flags) - Return value: New reference.
这是
PyRun_FileExFlags()
下面的简化界面,留下closeit设置为0
.
- PyObject *
PyRun_FileExFlags
( FILE *fp,const char *filename,int start,PyObject *globals,PyObject *locals,int closeit,PyCompilerFlags *flags) - Return value: New reference.
类似于
PyRun_StringFlags()
,但是从fp读取Python源代码而不是内存中的字符串。filename应该是文件的名称,它是从文件系统编码解码的(sys.getfilesystemencoding()
)。如果closeit是的,文件在PyRun_FileExFlags()
returns之前关闭.
- PyObject*
Py_CompileString
( const char *str,const char *filename,int start) - Return value: New reference.
这是
Py_CompileStringFlags()
下面的简化界面,将flags设置为NULL.
- PyObject *
Py_CompileStringFlags
( const char *str,const char *filename,int start,PyCompilerFlags *flags) - Return value: New reference.
这是
Py_CompileStringExFlags()
下面的简化界面,optimize设置为-1
.
- PyObject *
Py_CompileStringObject
(const char *str,PyObject *filename,int start,PyCompilerFlags *flags,int optimize) - Return value: New reference.
解析和编译str,返回生成的代码对象。起始标记由start给出;这可以用来约束可以编译的代码,应该是
Py_eval_input
,Py_file_input
或Py_single_input
。由filename用于构造代码对象,可能出现在tracebacks或SyntaxError
异常消息。如果代码无法解析或编译,则返回NULL。整数optimize指定编译器的优化级别;
-1
的avalue选择-O
选项给出的解释器的优化级别。显式级别是0
(没有优化;__debug__
是真的),1
(断言被删除,__debug__
是假的)或2
(docstrings也被删除).版本3.4.
- PyObject*
Py_CompileStringExFlags
( const char *str,const char *filename,int start,PyCompilerFlags *flags,int optimize) - Return value: New reference.
喜欢
Py_CompileStringObject()
,但filename是从文件系统编码解码的字节字符串(os.fsdecode()
).新版本3.2.
- PyObject*
PyEval_EvalCode
( PyObject *co,PyObject *globals,PyObject *locals) - Return value: New reference.
这是
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) - Return value: New reference.
在给定特定评估环境的情况下,评估预编译的代码对象。此环境包含全局变量字典,局部变量的映射对象,参数数组,关键字和默认值,keyword-only 参数和cells的闭包元组.
PyFrameObject
- 用于描述框架对象的对象的C结构。这种类型的领域随时都有变化.
- PyObject*
PyEval_EvalFrame
( PyFrameObject *f) - Return value: New reference.
评估执行帧。这是
PyEval_EvalFrameEx()
的简化界面,以便向后兼容.
- PyObject*
PyEval_EvalFrameEx
( PyFrameObject *f,int throwflag) - Return value: New reference.
这是Python解释的主要功能。它总长2000线。与执行帧相关的代码对象f执行,解释字节码并根据需要执行调用。附加throwflag参数大多可以忽略 – 如果为true,则会立即引发异常;这用于
throw()
生成器对象的方法.更改版本3.4:此函数现在包含一个调试断言,以帮助确保它不会以静默方式丢弃活动exception.
- int
PyEval_MergeCompilerFlags
( PyCompilerFlags *cf) - 这个函数改变当前评估框架的标志,并返回true成功,失败时错误.
- int
Py_eval_input
-
来自Python语法的起始符号用于孤立表达式;与
Py_CompileString()
.
- int
Py_file_input
-
一起使用Python语法中的起始符号,用于从文件或其他源读取的语句序列;与
Py_CompileString()
一起使用。这是编译任意长Python源代码时使用的符号.
- int
Py_single_input
-
Python语法的起始符号表示单个语句;与
Py_CompileString()
一起使用。这是用于interactiveinterpreter循环的符号.
- struct
PyCompilerFlags
- 这是用于保存编译器标志的结构。如果代码只是编译,它将作为
int flags
,并且在代码被执行的情况下,它被传递为PyCompilerFlags *flags
。在这种情况下,from__future__ import
可以修改flags.每当
PyCompilerFlags *flags
是NULL,cf_flags
被视为等于0
,以及由于from __future__ import
isdiscarded.struct PyCompilerFlags { int cf_flags; }
- int
CO_FUTURE_DIVISION
- 这个位可以设置在flags引起分工
/
根据PEP 238 .
评论被关闭。