我是否可以在我的 pygame 游戏中找到昂贵的功能(例如,A* 寻路)并将它们重写为此处概述的扩展?
这样做有速度优势吗?有更好的(python)解决方案吗?
我问这个问题是因为我刚刚开始学习 C 的原因不相关,当我想到这可能是我回到 Python 和 pygame 时的好主意。
这样做有速度优势吗?
如果不知道自己在做什么,就不可能说出来,但一般的答案是“很可能”。
有更好的(python)解决方案吗?
再次,这是不可能的。比什么更好?
如果您正在使用数值数组,那么第一步可能应该是使用NumPy。
完成此操作后,除了在原始 C 中编码扩展之外,还有多种途径可以加快速度:
最后,如果您确实发现自己正在编写 C 或 C++ 扩展,请考虑使用SWIG或Boost.Python。
您可以使用 cProfile 查找代码中最昂贵的函数。我很确定在将一些代码移至 C 之后,您会看到性能改进。根据我的测试,它可以是 2 倍到 200 倍的任何改进,具体取决于您的代码。
实现这一点的最简单方法是将昂贵的函数移动到单独的模块中,添加变量声明并使用 Cython 编译它们。然后,您可以将它们导入到您的主程序中,因为它们是 python 模块。
这是一个很棒的教程,介绍了可用于优化代码的不同方法,包括分析和 Cython:
http://ianozsvald.com/HighPerformancePythonfromTrainingatEuroPython2011_v0.2.pdf