NumPy参考 >NumPy C-API > C API弃用
NumPy公开的用于第三方扩展的API已经增长了许多年,并且允许程序员直接从C访问NumPy功能。此API最好描述为“有机”。多年来,它已从多种竞争需求和多种观点中脱颖而出,受到希望使用户轻松从Numeric和Numarray迁移到NumPy的需求的强烈影响。核心API起源于Numeric于1995年,其模式包括大量使用模仿Python C-API编写的宏以及90年代后期的编译器技术。也只有一小部分志愿者花很少的时间来改善此API。
正在进行改进API的工作。在此过程中,重要的是要确保为NumPy 1.X编译的代码继续为NumPy 1.X编译。同时,某些API将被标记为已弃用,以便将来使用的代码可以避免使用这些API并遵循更好的做法。
C API中弃用标记所扮演的另一个重要角色是朝着隐藏NumPy实现的内部细节迈进。对于需要直接,轻松访问ndarray数据的用户,这不会消除此功能。相反,有许多潜在的性能优化需要更改实现细节,并且NumPy开发人员由于保留ABI兼容性的高价值而无法尝试它们。通过弃用这种直接访问,我们将来将能够以目前无法实现的方式提高NumPy的性能。
在C语言中,没有等效于Python支持的弃用警告。进行弃用的一种方法是在文档和发行说明中对其进行标记,然后在将来的主要版本(NumPy 2.0及更高版本)中删除或更改不赞成使用的功能。NumPy的次要版本不应具有重大的C-API更改,但是,这会阻止代码在先前的次要版本上运行。例如,我们将尽最大努力确保在NumPy 1.4上编译和工作的代码应继续在NumPy 1.7上工作(但可能会有编译器警告)。
要使用NPY_NO_DEPRECATED_API机制,需要在#包含任何NumPy标头之前#将其定义为NumPy的目标API版本。如果要确认您的代码针对1.7是干净的,请使用:
#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
在支持#warning机制的编译器上,如果未定义符号NPY_NO_DEPRECATED_API,则NumPy会发出编译器警告。这样,将为可能没有仔细阅读发行说明的第三方开发人员标记存在弃用的事实。