简介 应用程序程序员的Python接口使C和C ++程序员可以在各种级别访问Python解释器。API可以与C ++同等地使用,但为了简洁起见,它通常被称为Python / CAPI。使用Python / C API有两个根本不同的原因。第一个原因是为特定目的写扩展模块;这些是扩展Python解释器的C模块。这可能是最常用的。第二个原因是使用Python作为大型应用程序中的一个组件;这种技术通常被称为嵌入 Pythonin一个应用程序. 编写扩展模块是一个相对容易理解的过程,其中“烹饪书”方法很有效。有几种工具可以在一定程度上自动化过程。虽然人们在早期存在的过程中将Python嵌入到其他应用程

1.在另一个应用程序中嵌入Python 前面的章节讨论了如何扩展Python,即如何通过附加C函数库来扩展Python的功能。反过来也是可行的:通过嵌入Python来丰富你的C / C ++应用程序。嵌入为您的应用程序提供了在Python而不是Cor C ++中实现应用程序的某些功能的能力。这可以用于许多目的;一个例子是允许用户通过在Python中编写一些脚本来定制应用程序以满足他们的需求。你可以自己使用它,如果一些功能可以用Pythonmore轻松编写. 嵌入Python类似于扩展它,但并不完全。不同之处在于,当你扩展Python时,应用程序的主程序仍然是thePython解释器,而如果嵌入

5.在Windows上构建C和C ++扩展 本章简要介绍如何使用Microsoft Visual C ++为Python创建Windows扩展模块,并详细介绍如何使用它的背景信息。解释性材料对于学习构建Python扩展的Windows程序员和能够在Unix和Windows上成功构建软件的Unix程序员都很有用. 鼓励模块作者使用distutils方法构建扩展模块,而不是本节中描述的那个。你仍然需要用于构建Python的C编译器;通常是Microsoft VisualC ++。 注意 本章提到了许多包含编码的Pythonversion编号的文件名。这些文件名用版本号表示XY;在实践中,”X”将是

4.构建C和C ++扩展 CPython的AC扩展是一个共享库(例如Linux上的.so文件,Windows上的.pyd),它导出initialization function. 要导入,共享库必须在PYTHONPATH上可用,并且必须以模块名称命名,并带有适当的扩展名。使用distutils时,会自动生成正确的文件名. 初始化函数有签名: PyObject * PyInit_modulename( void ) 它返回一个完全 -初始化模块,或PyModuleDef实例。参见初始化C模块了解详情. 对于只有ASCII名称的模块,该函数必须命名为PyInit_<modulename&gt

keyword– 测试Python关键字 源代码: Lib / keyword.py 这个模块允许Python程序确定字符串是否是关键字. keyword.iskeyword(s) 如果s是Python关键字,则返回true。 keyword.kwlist 包含为解释器定义的所有关键字的序列。如果任何关键字被定义为仅在特定的__future__语句生效时才被激活,那么这些关键字也将被包括在内.

codeop– 编译Python代码 源代码: Lib / codeop.py codeop模块提供了Pythonread-eval-print循环可以使用的实用程序仿效,就像code模块中所做的那样。因此,您可能不希望直接使用该模块;如果你想在你的程序中包含这样一个循环,你可能想要使用code模块来代替 这个工作有两个部分: 能够判断是否一行输入完成一个Python语句:inshort,告诉是否打印’>>>‘或’…‘next. 记住用户输入的未来语句,所以后续输入可以用这些有效编译. codeop模块提供了一种

code– 解释器基类 源代码: Lib / code.py codemodule提供了在Python中实现read-eval-print循环的工具。包括两个类和便利功能,可用于构建提供交互式解释器提示的应用程序. class code.InteractiveInterpreter(locals=None) 这个类处理解析和解释器状态(用户的命名空间);它不处理输入缓冲或提示或输入文件命名(文件名始终显式传递)。可选localsarguments指定将在其中执行代码的字典;它默认为一个新创建的字典,键”__name__”设置为”__console__”并且键”__doc__”设置为

inspect– 检查实时对象 源代码: Lib / inspect.py inspect模块提供了几个有用的函数来帮助获取有关活动对象的信息,例如模块,类,方法,函数,回溯,框架对象和代码对象。例如,它可以帮助您检查类的内容,检索方法的源代码,提取和格式化函数的参数列表,或获取显示详细的traceback所需的所有信息. 有这个模块提供的四种主要服务:类型检查,获取源代码,检查类和函数,以及检查解释器堆栈. 类型和成员 getmembers()功能检索对象(如aclass或模块)的成员。名称以“是”开头的函数主要是为getmembers()的第二个参数提供方便的选择。它们还可以帮

atexit– 退出处理程序 atexit模块定义了注册和取消注册清理功能的功能。这样注册的功能在正常解释器终止时自动执行。atexit按照reverse的顺序运行这些功能;如果你注册A, B和C,在翻译终止时间它们将按顺序运行C, B,A. 注意:通过这个模块注册的功能是当程序被Python未处理的信号杀死时,当检测到Python致命内部错误,或者os._exit()被调用时,没有调用. 更改版本3.7:当与C-API子解释器一起使用时,注册的函数在它们注册的解释器的本地. atexit.register (func, *args, **kwargs) 注册func作为函数在终止

sys– 系统特定的参数和功能 该模块提供对解释器使用或维护的一些变量的访问,以及与解释器强烈交互的函数。它总是可用的 sys.abiflags 在使用标准configure脚本,它包含PEP 3149 . 版本3.2. sys.argv 传递给Python脚本的命令行参数列表。argv[0]是脚本名称(依赖于操作系统是否为完整路径名)。如果使用-c命令行选项解释器,argv[0]设置为字符串”-c”。如果没有脚本名称传递给Python解释器,argv[0]是空字符串. 要循环标准输入或命令行上给出的文件列表,请在运行fileinput之前的Ipython启动期间查看 sys.ba