我在 Cython 工作,我需要使用 Python 的int
类型,而不是 C 的int
类型。如何将 Cython 变量声明为 Python 样式的整数?
cdef int x
将使用 C 风格的整数,而不是 Python 风格的整数。
cdef object x
可以存储 Python 风格的整数,但由于冗余的运行时类型检查,它会很慢。
如果我 100% 知道一个对象将是int
,我可以避免运行时类型检查吗?
在用Cython文档似乎表明它声明为object
是最好的,我们可以做的,我们只是不得不忍受冗余。这感觉不符合 Cython 的特点,而且我并不完全相信我正确地解释了文档。
甚至有可能做我要问的事情吗?
文档非常清楚(添加了重点):
Python的类型
int
,long
以及float
不适用于静态类型,而是解释为Çint
,long
和float
分别为静态与这些Python类型输入变量具有零个优点。
有许多与诸如list
,tuple
等相关联的具体 C API ,其中静态类型提供了一个有意义的好处,允许 Cython 通过编译在更具侵入性的级别上使用它们的代码来节省时间(直接访问底层数组list
和tuple
例如)。对于 Python 3 int
(和 Python 2 long
),这种优势基本上不存在;最好用Cython可以跳过一个微小的类型检查的工作量,以换取需要重现参与行动没有这些预检查代码的所有其他(Python的2名的int
是Clong
在引擎盖下,所以你也可以这样声明并直接使用原始 C 值受益)。考虑到处理任意精度整数的复杂性,它的代码相当多,而且完全没有必要。如果您的值足够小,您可以将它们用作 C 类型,但对于任何更大的值,专门用于它们的成本将大于收益。
简而言之:将其声明为无,或者object
如果您想明确表示。您尝试做的事情没有任何好处,而且无论如何您都做不到。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句