超越Python¶
这是与包含用Python以外的语言编写的代码相关的一些想法的小集合。目前,对于Python以外的语言,我们有额外文档的唯一选项是 Cython 。
我可以使用Python以外的编程语言来加速我的代码吗?
是。本网站中使用的语言有Python、Cython、Pythran、C、C++和Fortran。所有这些都各有利弊。如果Python确实不能提供足够的性能,可以使用这些语言中的一种。使用编译语言时的重要问题是可维护性和可移植性。在可维护性方面,Pythran和Cython比C/C++/Fortran更受欢迎。Cython、C和C++比Fortran更可移植。SciPy中的许多现有Fortran代码都是较旧的、经过战斗测试的代码,它们只包装在Python/SciPy中(但不是专门为Python/SciPy编写的)。
我们的基本建议是:使用Pythran或Cython来加速较小的代码段。在Pythran或Cython不再够用的情况下,首选C或C++。如果首选Fortran有特定原因,请先讨论这些原因。
我可以用Numba吗?
还没有,但我们正在为将来考虑。可以编写采用由Numba生成的用户定义函数的代码,请参见 扩展 scipy.ndimage 在C中 。
How do I debug code written in C/C++/Fortran inside SciPy?
要做到这一点,最简单的方法是首先编写一个Python脚本,该脚本调用您想要调试其执行的C代码。例如 mytest.py
::
from scipy.special import hyp2f1
print(hyp2f1(5.0, 1.0, -1.8, 0.95))
现在,您可以运行::
gdb --args python runtests.py -g --python mytest.py
如果以前没有启用调试符号进行编译,请移除 build
首先是目录。在调试器中时::
(gdb) break cephes_hyp2f1
(gdb) run
现在,执行将在相应的C函数处停止,您可以像往常一样逐步执行它。而不是平淡无奇 gdb
当然,您可以使用您最喜欢的替代调试器;在 python
带参数的二进制文件 runtests.py -g --python mytest.py
。