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

Loops Cython:有效地循环使用多种类型的列表,loops,cython,Loops,Cython,我有一个Python函数,它在一个列表上循环,我想将它转换为Cython以提高性能 它接受的列表包含字符串、整数和浮点的混合,因此我不确定如何静态地键入所涉及的变量(我不知道C) 在Cython中实现这样的东西最有效的方法是什么?您似乎希望C类型具有Python对象的所有灵活性,但速度会神奇地更快 这里基本上有一个好的选项和一个坏的选项: 好的选择是接受这样一种类型实际上并不存在 因此,您应该将从列表中提取的数据保持为非类型化,以便它仍然是常规Python对象。并非Cython中的所有内容都需

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

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


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

您似乎希望C类型具有Python对象的所有灵活性,但速度会神奇地更快

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

  • 好的选择是接受这样一种类型实际上并不存在

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

    可能值得将列表键入为
    list
    ,因为Cython知道iterable是一个列表时,可以生成稍微高效一些的循环

  • 不好的选择是使用C的一个称为union的特性,该特性表示数量有限的不同类型变量之一。我不推荐这样做(特别是对于那些还不了解C的人),因为没有“简单”的Cython包装(你必须直接深入C的细节)。您会发现在
    联合中处理字符串特别具有挑战性

    追求这一选择将自担风险


除了迭代之外,您对这些Python对象(因为列表中包含了这些对象)做了什么?@hpaulj在虚拟机上推动不同的堆栈。