如何在 Cython 中有效地使用 Python 风格的整数?

亚伦·斯塔内克

我在 Cython 工作,我需要使用 Python 的int类型,而不是 C 的int类型。如何将 Cython 变量声明为 Python 样式的整数?

cdef int x 将使用 C 风格的整数,而不是 Python 风格的整数。

cdef object x 可以存储 Python 风格的整数,但由于冗余的运行时类型检查,它会很慢。

如果我 100% 知道一个对象将是int,我可以避免运行时类型检查吗?

用Cython文档似乎表明它声明为object是最好的,我们可以做的,我们只是不得不忍受冗余。这感觉不符合 Cython 的特点,而且我并不完全相信我正确地解释了文档。

甚至有可能做我要问的事情吗?

暗影游侠

文档非常清楚(添加了重点):

Python的类型intlong以及float不适用于静态类型,而是解释为Ç intlongfloat分别为静态与这些Python类型输入变量具有零个优点。

有许多与诸如list,tuple相关联的具体 C API ,其中静态类型提供了一个有意义的好处,允许 Cython 通过编译在更具侵入性的级别上使用它们的代码来节省时间(直接访问底层数组listtuple例如)。对于 Python 3 int(和 Python 2 long),这种优势基本上不存在;最好用Cython可以跳过一个微小的类型检查的工作量,以换取需要重现参与行动没有这些预检查代码的所有其他(Python的2名的int是Clong在引擎盖下,所以你也可以这样声明并直接使用原始 C 值受益)。考虑到处理任意精度整数的复杂性,它的代码相当多,而且完全没有必要。如果您的值足够小,您可以将它们用作 C 类型,但对于任何更大的值,专门用于它们的成本将大于收益。

简而言之:将其声明为无,或者object如果您想明确表示。您尝试做的事情没有任何好处,而且无论如何做不到。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用python在pandas数据帧中有效地迭代行

如何在R中有效地对大整数向量进行分类

如何在python中有效地搜索列表

如何在python中有效地搜索列表?

如何在python中有效地将字典中的值分组

如何在python中有效地对列表进行分类

如何在Python中有效地将参数解译到数据库

如何在python类列表中有效地创建编号列表

如何在Python中有效地计算巨大的矩阵乘法(tfidf功能)?

如何在Python中有效地计算多个文档中的双字母组

如何在Python中有效地匹配两个数组值?

如何在 Python 中有效地按段聚合

如何在python中有效地找到图形的顶部边界线

如何在python中有效地结合断开的csr矩阵?

如何在python中有效地根据多个条件拆分文本?

如何有效地使用Python属性?

如何在Python中有效地生成具有随机斜率和截距的直线?

如何在python中有效地合并两个具有容差的数据帧

如何在 Python 中有效地将 2 元组的所有串联计算成更长的链

如何在python中有效地找到两个字典之间的所有差异

如何在python pandas中有效地使用字符串匹配和聚合函数合并csv

如何在Python中有效地在多个线程和进程之间共享数据?

如何在Python中有效地生成仅包含唯一数字的随机数?

如何在Python中有效地循环访问三个不同的数据集合?

如何在 Python 3 中有效地定义自定义全局比较器?

如何在Python中有效地将同一操作应用于多个变量?

如何在python 3中有效地将原始字节写入numpy数组数据

如何在Python网络机器人中有效地实现多线程/多处理?

您如何在 Python 中有效地执行数百万次 t 检验?