Cython:Clevel int与PyLongObjects

2024-09-28 01:26:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我在读库尔特·W·史密斯写的《赛顿》一书。我被这本书搞糊涂了。在

作者在第42页说:

In cases where Python built-in types like int or float have the same name as a C type, the C type takes precedence. This is almost always what we want.

然而在第44页,作者说:

Python also has a PyLongObject at the C level to represent arbitrarily sized integers. In Python 2, these are exposed as the long type, and if an operation with PyIntObject overflows, a PyLongObject results.

In Python 3, at the C level, all integers are PyLongObjects.

我的问题是如果我在python3中声明了一个变量,比如

cdef int a;

a是C级int,因为C类型优先,还是PyLongObject?在

如果是C级int,如何解释第二部分?在


Tags: theintegersinastype作者wherelevel
2条回答

cdef int a在python2和python3中声明一个C级整数;C类型优先。在

作者似乎想说的是,python3中的int总是意味着PyLongObject类型。现在Pythonintlong数字类型之间没有区别。在

Python2有^{}类型来表示PyLongObject类型,但在python3中,这已经被删除了,它只有int来引用PyLongObject类型。因此,当您在python3中使用Cython时,在编写cdef long a时,与内置类型没有潜在的冲突。在

对于这类问题,最简单的解决办法就是试一试,看看会发生什么:

$ cat > foo.pyx
cdef int mytestint
mytestint = 1
$ cython foo.pyx 
$ grep mytestint foo.c | head -n 1
static int __pyx_v_3foo_mytestint;

相关问题 更多 >

    热门问题