Cython:用多种类型有效地循环列表



我有一个Python函数,它在列表上循环,我想将它转换为Cython以提高性能。

它接受的列表包含字符串、整数和浮点的混合,所以我不知道如何静态键入所涉及的变量(我不知道C(。

在Cython中实现这样的功能最有效的方法是什么?

您似乎希望有一个C类型,它具有Python对象的所有灵活性,但不知何故速度更快。

这里基本上有一个好的选择和一个坏的选择:

  • 好的选择是接受这样一种类型并不真的存在。

    因此,您应该将从列表中提取的数据保持为非类型化,以便它仍然是一个常规Python对象。并不是Cython中的所有内容都需要类型化——绝大多数Python代码都应该以不变的方式运行。

    将列表键入为list可能是值得的,因为当Cython知道可迭代的是列表时,它可以生成稍微高效的循环。

  • 坏的选择是使用C的一个称为union的特性,它表示一个变量,该变量是有限数量的不同类型之一。我不建议这样做(尤其是对于不知道C的人(,因为没有"C";"容易";Cython包装(您必须直接深入到C细节(。您会发现在union中处理字符串特别具有挑战性。

    追求这个选择要自担风险。

最新更新