我有一个Python函数,它在列表上循环,我想将它转换为Cython以提高性能。
它接受的列表包含字符串、整数和浮点的混合,所以我不知道如何静态键入所涉及的变量(我不知道C(。
在Cython中实现这样的功能最有效的方法是什么?
您似乎希望有一个C类型,它具有Python对象的所有灵活性,但不知何故速度更快。
这里基本上有一个好的选择和一个坏的选择:
-
好的选择是接受这样一种类型并不真的存在。
因此,您应该将从列表中提取的数据保持为非类型化,以便它仍然是一个常规Python对象。并不是Cython中的所有内容都需要类型化——绝大多数Python代码都应该以不变的方式运行。
将列表键入为
list
可能是值得的,因为当Cython知道可迭代的是列表时,它可以生成稍微高效的循环。 -
坏的选择是使用C的一个称为
union
的特性,它表示一个变量,该变量是有限数量的不同类型之一。我不建议这样做(尤其是对于不知道C的人(,因为没有"C";"容易";Cython包装(您必须直接深入到C细节(。您会发现在union
中处理字符串特别具有挑战性。追求这个选择要自担风险。