作者:empty 页数:271 出版社:empty |
Python的应用编程接(API) 使得C和C++程序员可以在多个层级上访问Python解释器.该API在C++中同样可用, 但为简化描述, 通常将其称为Python/CAPI.使用Python/CAPI有两个基本的理由。第二个理由是为了特定的而编写展模块, 它们是扩展Py il解器功能的C模块。这可能是最常见的使用场景, 第二个理由是将Python用作更大规模应用的组件; 这种技巧通常被称为在一个应用中embedding Python,编写扩展模块的过程相对来说更易于理解,可以通过“菜谱”的形式分步骤介绍,使用某些工具可在一定程度上自动化这一过程。虽然人们在其他应用中嵌人Python的做法早已有之, 但嵌人Python的过程没有编写扩展模块样方便直观。许多API函数在你嵌人或是扩展Python这两种场景下都能发挥作用:此外, 大多数嵌人Python的应用程序也需要提供自定义扩展, 因此在尝试在实际应用中嵌人Python之前先熟悉编写扩展应该会是个好主意.
1.1代码标准如果你想要编写可包含于CPython的C代码、你必须遵循在PEP 7中定义的指导原则和标准, 这些指导原则适用于任何你所要扩展的Python版本, 在编写你自己的第三方扩展模块时可以不必遵循这些规范,除非你准备在日后向Python贡献这些模块.1.2包含文件使用Python/CAPI所需要的全部函数、类型和宏定文可通过下面这行语句包含到你的代码之中;der in ePY_SS TZE_T_CLEANin eludes ey thon.h这意味着包含以下标准头文件:c stdio.h>, cstring.hz.c errno.h>.c limits.h>, c assert.h>和c stdlib.h>(如果可用) ,注解:由于Python可能会定义一些能在某些系统上影响标准头文件的预处理器定义, 因此在包含任何标准头文件之前, 你必先包含Python.h。The Python/CAPI, 发布3.8.1It is recommended to always det in ePY_SS1ZE_T_CLEAN before including Python.h.See语句解释及变量编译for a description of this mac toPython.h所定义的全部用户可见名称(由包含的标准头文件所定义的除外) 都带有前級Py或者_Py.以_Py打头的名称是供Python实现内部使用的, 不应被扩展编写者使用.结构成员名称没有保留前缀。注解:User code should never def ie names that begin with Py or_Py.This confuses the reader, and jeopardizesthe portability of the user code to future Python versions, which may define additional names beginning with one ofthese preh xes头文件通常会与Python一起安装。在Unix上, 它们位于以下目录:pre rix/include/python version/和exec_pre tix/include/python version/, 其中prefix和exec_prefix是由向Python的configure脚本传人的对应形所定义, 而version则为'4d.d'务sys.version_info[:2] .在Windows上, 头文件安装于prefix/include, 其中prefix是向安装程序指定的安装目录。要包含头文件,请将两个目录(如果不同)都放到你所用编译器的包含搜索路径中,请不要将父目录放人搜索路径然后使用#include cpython X.Y/Python.h>; 这将使得多平台编译不可用, 因为prefix下平台无关的头文件需要包含来自exec_prefix下特定平台的头文件.C++users should note that although the API is dened entirely using C, the header files properly declare the entrypoints to be extern c .As are sul r, there is no need to do anything special to use the API from C++1.3有用的宏Python头文件中定义了一些有用的宏.许多是在靠近它们被使用的地方定义的(例如Py_RETURN_NONE) .其他更为通用的则定义在这里。这里所显示的并不是一个完整的列表.Py_UNREACHABLE()这个可以在你有一个不打算被触及的代码路径时使用, 例如, 当一个switch语句中所有可能的值都已被ca5e子句覆盖了, 就可将其用在default:子句中, 当你非常想在某个位置放一个assert(0) 或abort() 调用时也可以用这个。3.7新版功能Py_ABS(x)Py_MIN(x, y)Py_MAX(x.y)返回x的绝对值。3.3新版功能返回x和y当中的最小值。3.3新版功能返回x和y当中的最大值。3.3新版功能Py_STRINGIFY(X)Py_MEMBER_SIZE(type, member)Py_CHARM ASK(c)将x转换为C字符串。例如Py_STRINGIFY{123) 返回 123 .3.4新版功能返回结构(type) mem bet的大小, 以字节表示。3.6新版功能参数必须为[-128.127] 或[0.255] 范围内的字符或整数类型。这个宏将c强制转换为unsignedchar返回
Cntents
1概述
代码标准,
包含文件,
有用的宏
进程控制
异人模块,.
数字协议,
序列协议,
映射协议
迭代器协议
旧缓冲协议
数值对象
序列对象
容器对象.
对象、类型和引用计数
异凉
调试构建.
2稳定的应用程序二进制接
3 The Very High Level Layer
4引用计数
5异常处理
rsin Cntrl
5.10标准异常:.
.1标准告类别,
工具
6.1操作系统实用程序
62系统功能,
6.5Duta mahal lng supprt,
6.0语句解释及变量编译
6.7字符申转换与格式化.
6.8反射
6.9编解码器注册与支持功能
7抽象对象层
7.1对象协议,.
7.6缓冲协议:
8具体的对象层
8.1基本对象
8.5函数对象
8.6其他对象:
9 Initializatin, Finalizatin, and Threads
9.1在Pythn初始化之前.
92全局配置变量.
In it zing and n aig the interp neet
94Prcess-wide parameters.
95Thread State and the Glbal Interpreter Lck
96Sub-interpreter supprt,
9.7
异步通知.
9.8分析和跟踪
9.9高级调试器支持.
9.10ThreadLcalSturage Supprt
10 Pythn初始化配置
10.1Py WideString List.
10.2Py Status
10.Py Pre Cnfig.r
10.4PreniitinwiPyPreCanhg
10.5Py Cnfig.+
10.6InifpzinwthPyCng
10.7 Islated Cnfiguratin
10.8 Pythn Cnfiguratin.
10.9路径配置,
10.10Py_Run Main
10.1Mul-Phase I mtzatnPvtePrvisinalAPI.
11内存管理
11.1概述,
112原始内存接
11.3内存接:.
11.4对象分配器
115默认内存分配器.
11.6 Custmize Memry Allcatrs
11.7Thepyma