我在读库尔特·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
,如何解释第二部分?在
cdef int a
在python2和python3中声明一个C级整数;C类型优先。在作者似乎想说的是,python3中的
int
总是意味着PyLongObject
类型。现在Pythonint
和long
数字类型之间没有区别。在Python2有^{} 类型来表示
PyLongObject
类型,但在python3中,这已经被删除了,它只有int
来引用PyLongObject
类型。因此,当您在python3中使用Cython时,在编写cdef long a
时,与内置类型没有潜在的冲突。在对于这类问题,最简单的解决办法就是试一试,看看会发生什么:
相关问题 更多 >
编程相关推荐