将扩展模块移植到Python 3 author: Benjamin Peterson 摘要 虽然改变C-API不是Python 3的目标之一,许多Python级别的更改使得Python 2的API无法实现。事实上,在//级别上,int()和long()统一等一些变化更为明显。本文档努力记录不兼容性以及它们如何解决. 条件编译 只编译Python 3的一些代码的最简单方法是检查PY_MAJOR_VERSION大于或等于3. #if PY_MAJOR_VERSION >= 3 #define IS_PY3K #endif API不存在的函数可以在条件块中等同于它们的等价物 更改为对象API

胶囊 参考为扩展模块提供C API 有关使用这些物体的更多信息. 版本3.1. PyCapsule 这个 的子类型PyObject表示一个不透明的值,对于需要传递不透明值的Cextension模块很有用(作为void*指针)通过Python代码到其他C代码。它通常用于使一个模块中定义的Cfunction指针可用于其他模块,因此可以使用通常的导入机制来访问动态加载的模块中定义的C API。 PyCapsule_Destructor 胶囊的析构函数回调的类型。定义为: typedef void (*PyCapsule_Destructor)(PyObject *); 请参阅PyCapsule_Ne