gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:56:09 26 4
gpt4 key购买 nike

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

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

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

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

Cython docs似乎表明将它声明为 object 是我们能做的最好的,我们只需要忍受冗余。这感觉不符合 Cython 的特点,我不完全相信我对文档的解释是正确的。

甚至可以按照我的要求做吗?

最佳答案

The docs非常清楚(强调):

The Python types int, long, and float are not available for static typing and instead interpreted as C int, long, and float respectively, as statically typing variables with these Python types has zero advantages.

有许多具体的 C API 与 listtuple 等相关,其中静态类型提供了一个有意义的好处,允许 Cython 通过以下方式节省时间在更具侵入性的层面上编译与它们一起工作的代码(例如,直接访问 listtuple 的底层数组)。对于 Python 3 的 int(和 Python 2 的 long),这种优势基本上不存在; Cython 充其量可以跳过少量 类型检查工作,以换取需要在没有这些预检查的情况下重现操作中涉及的所有其余代码(Python 2 的 int 是一个 C long 底层,所以你也可以这样声明它并直接使用原始 C 值。考虑到使用任意精度整数的复杂性,它是相当多的代码,而且完全没有必要。如果您的值足够小,您可以将它们用作 C 类型,但对于任何更大的值,专用于它们的成本将大于 yield 。

简而言之:将其声明为无,或者 object 如果您想明确。您尝试做的事情没有任何好处,而且您不能在任何情况下都这样做。

关于python - 如何在 Cython 中有效地使用 Python 风格的整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67941225/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com