有没有办法在Python中禁用数组边界检查?

时间:2016-01-25 03:31:46

标签: python performance

我正致力于提高python程序的性能,我想知道是否有办法通过禁用数组边界检查来提高性能?我知道Pascal的某些版本允许你这样做。 python有没有这样的功能?

我知道Python并不是为高性能而设计的,但我想知道以这种方式改善性能是否可行;否则是的,我知道切换到C会更快。

2 个答案:

答案 0 :(得分:3)

对于普通名单,没有。但是,您可以使用Python C API在C或C ++中创建自己的数据结构/函数(请参阅Extending Python with C or C++),您可以使用它来实现dangerous_unchecked_list数据结构,其行为类似于常规列表但没有这个检查(或者需要在内部绕过边界检查的其他一些更高级别的数据结构)。对于无法在Python中以最佳方式实现的大型操作,您还可以使用进程间通信(IPC) - 而不是C API - 来调用非Python实现。

但是,在走这条路之前,你应该确保这确实是性能瓶颈。您可能会发现还有其他领域可以获得更大的胜利,例如通过使用更好的算法,选择其他功能或数据结构来实现本地实际上是性能瓶颈,通过预先计算和/或缓存信息,或者通过某些其他方式。

答案 1 :(得分:3)

据我所知,禁用数组边界检查不能在Python中完成。 但是,可以使用指令

cython中轻松完成
#cython: boundscheck=False

然而,因为"过早优化是所有邪恶的根源。" (Knuth),您可能希望首先通过切换到pypy而不是python来检查脚本是否运行得更快。